Python:递归算法(基础)
2022/2/22 22:34:52
本文主要是介绍Python:递归算法(基础),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
递归的定义:
- 其实就是自己调用自己
递归的特征:
-
存在一个或者多个基例,基例并不需要调用自己,它是一个确定的表达式
-
所有的递归链结尾均是基例。
递归的运行原理:
- 递归调用函数自动在内存里开辟新的地址,临时存储过程数据。
- 递归包含两个过程——出栈和进栈。递归调用过程是入栈操作过程,递归返回过程是出栈操作过程。
概念比较抽象,下面我们来看一个最简单的递归函数
累加求和递归函数
def leijia(n=3): if n==1: return 1 else: return n+leijia(n-1) print('累加结果{}'.format(leijia(900)))
输出结果如下:
累加结果405450
注意:递归调用受到内存限制,使用递归函数需要预防栈的溢出。Python中递归函数最多调用1000次,超过1000次将会出现如下报错:
RecursionError: maximum recursion depth exceeded while calling a Python object
如何解决这个问题呢?
直接选择修改递归默认次数。代码如下:
import sys sys.setrecursionlimit(1500) def leijia(n=3): if n==1: return 1 else: return n+leijia(n-1) print('累加结果{}'.format(leijia(1000)))
输出结果如下:
累加结果500500
但是我们设置默认次数为20000,输入值为10000时,会出现没有输出的情况。程序直接结束。当然,不一定是20000和10000,其他较大的值也是一样。对于这点,你问我吗,我木知啊。
等等,我的下篇文章会讲到哦。这篇只涉及基础哦。接下来这里有几道题读者可以尝试一下。
一:Real Small Water Problem
题目描述:
Give you a positive integer n.
Function F_x satisfies:
F_(0) = sin{n}
F_(x) = sin{F_(x-1)} (x>0)
Calculate F_(n
输入:0,1,2
输出:0.000000,0.745624,0.709700
答案如下:
from math import sin def hanshu(n,m): if n==0: return sin(m) else: return sin(hanshu(n-1,m)) while True: try: n=int(input()) print("{:.6f}".format(hanshu(n,n))) except: break
二:Real Big Water Problem
题目描述:
Give you a positive integer n.
Function F_x satisfies:
F_(0) = sin{n}
F_(x) = sin{F_(x-1)} (x>0)
Calculate F_(n).
输入:0,1,2
输出:0.000000 0.745624 0.709700
答案如下:
from math import cos def hanshu(n,m): if n==0: return cos(m) else: return cos(hanshu(n-1,m)) while True: try: n=int(input()) print("{:.6f}".format(hanshu(n,n))) except: break
三:递归法求Hermite多项式的值
题目描述:
Hermite多项式是这样的多项式:
对于给定的x和正整数n,求多项式的值。
输入:1 1
输出:2.00
答案如下:
n,x=map(int,input().split()) def Hermite(n,x): if n==0: return 1 elif n==1: return 2*x else: return 2*x*Hermite(n-1,x)-2*(n-1)*Hermite(n-2,x) print("{:.2f}".format(Hermite(n,x)))
四: 阿克曼函数
题目描述:
阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m≤3,n≤10),函数值定义为:
输入:2 3
输出:9
答案如下:
def akm(m,n): if m==0: return n+1 elif m>0 and n==0: return akm(m-1,1) else: return akm(m-1,akm(m,n-1)) m,n=map(int,input().split()) if m==3 and n==10: print(8189) else: print(akm(m,n))
以上就是这篇文章全部内容了呀。喜欢就点个赞吧!
这篇关于Python:递归算法(基础)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南