1、函数递归概念:理论上,一个函数中可以嵌套另一个函数(即在函数中还可以调用函数)。
而在python中还有另一种:在函数中可调用自身函数(该函数自身),也称为递归函数。
def func():
#自己调用自己
func()
func()
2、介绍:
①编程思维:将问题拆分成一些数学模型,在用代码实现数学模型的过程。
②算法:指用代码实现数学模型,从而解决对应的业务问题。
③程序=算法+数据结构--->算法最常用的有两种:递推和递归
④递推算法:通过已知条件,利用特定条件,得出中间推论,知道得出结果(正推和逆推)
递推举例:斐波那契数列,见下图
由上图可知f(1),f(2)--->f(3);f(2),f(3)--->f(4);....f(n)的过程叫做地递推
可用while或for循环:
def recusive(n):
if n==1 or n==2:
return 1
dict = {1:1,2:1}
for i in range(3,n+1):
dict[i] = dict[i-1] + dict[i-2]
return dict[n]
#函数调用
print(recusive(15))
3、递归两个重要的元素:
①递归点:找到解决当前问题的等价函数。
②递归出口:当问题得到解决的时候,以达到最优,不能再次调用函数。(若无就为死循环)
4、函数递归三要素:
①说明函数要干什么
②寻找递归结束条件(在什么条件下,递归停止循环返回结果)
③找到函数的等价关系式
Try:①用递归求斐波那契数列
def f(n):
if n==1 or n==2:
return 1
return f(n-1)+f(n-2)
print(f(15))
②求n的阶乘(n!=1x2x3x4x5x6x7x8x9.....x(n-1)xn)
def f(n):
#寻找递归的结束条件
if n<=2:
return n
#等价关系式
return n*f(n-1)
print(f(5))
③猴子吃桃(若不了解请自行搜索题目)
运用假设法:假设有10个桃子
第一天,吃了一半:10/2=5 5+1=6
第二天 4/2=2 2+1=3
第三天 剩1个
第n天 总数=(第(n+1)天的剩余量+1)*2======》sum=(f(n+1)+1)*2
#确定函数的功能
def f(n):
if n == 10 :
return 1
#找等式
return (f(n+1)+1)*2
#调用函数
print(f(1))