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)
少一些功利主义的追求,多一些不为什么的坚持!