什么是递归函数?
递归(recursion):
1.是一个函数
2.函数执行的过程中,自己调用自己
3.递归一定有结束调用自己的条件
4.递归效率不高
5.什么问题必须用递归?汉诺塔
6.不会死循环,有最大递归次数限制,会报错 RecursionError: maximum recursion depth exceeded while calling a Python object
So,知道了什么是递归函数,直接上代码看例子,以斐波那契数列(Fibonacci sequence)为例:
1 1 2 3 5 8 13 21 34
前两项为1,后面每一项的值为其前两项值的和
使用非递归算法求fib数列中第n项的值:
def fib1(n):
n1 = 1
n2 = 1
for i in range(n-2):
n1,n2 = n2,n1+n2
return n2
print(fib1(7))
使用递归算法求fib数列中第n项的值:
def fib2(n):
if n == 1 or n == 2:
return 1
else:
return fib2(n-2)+fib2(n-1)
print(fib2(7))
刚接触递归可能很难理解,可能看不懂代码的实现逻辑,建议使用3次调用,来分析递归调用的过程。
以fib2(4)为例
fib2(4)-->
fib2(3)+fib2(2) -->fib2(3)=fib2(2)+fib2(1),fib2(2)=1-->
fib2(2)+fib2(1)+1-->fib2(2)=1,fib2(1)=1-->
fib2(4) = (fib2(2)+fib2(1))+fib2(2)=1+1+1 = 3
注:
递归的效率不高