Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

时间:2023-03-09 21:25:10
Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

什么是递归?简单的说就是:函数自身调用自身。

“普通程序员用迭代,天才程序员用递归”

虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢,

但在一些算法上面仍然是递归很实用

但需要注意的是:

#递归是自己调用自己 很消耗时间,还会有消耗空间的危险,所以递归递归一定要知道“归去来兮”

#所谓“归去来兮”就是指递归的两个原则:
#1.调用了函数自身
#2.设置了自身正确的返回值 (必须有一个正确的返回停止条件,不能无限下去)

举简单的例子

下面是用迭代和递归实现的阶乘的对比:

#用循环函数实现阶乘:
def factorial(n):
for i in range(1,n):
n *= i
return n #递归版本的阶乘实现:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

下面是用迭代和递归实现的Fibonacci数列的对比:

# Fibonacci 数列的递归实现:

 #1.用迭代的方式实现
def Fibonacci(n):
n1 = 1
n2 = 1
n3 = 2
if n < 0:
return -1
print('Error,please enter a correct month...')
elif n == 1:
return n1
elif n == 2:
return n2
else:
for i in range(3,n+1):
n3 = n2 + n1
n1 = n2
n2 = n3
return n3 #2.用递归的方式实现
def fab(n):
if n < 1:
print('输入有误...')
return -1
elif n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)