递归
Python中,简单来说所谓递归就是自身调用自身的过程。
以下列代码为例:
def funA():
print("我在调用自己!")
funA()
运行截图:
此时程序会无休止的运行输出结果 “我在调用自己啊”
(如果用的是IDLE,我们可以使用快捷键 Ctrl+C 强制停止程序)
如果想让递归正常工作需要设置一个结束条件,并且每次调用都要向着这个条件靠拢。
代码如下
def funB(i): #传入一个参数i
if i > 0: #结束条件
print("我是第{}个".format(i))
i -= 1 #每次调用都会向着结束条件靠近
funB(i)
funB(10)
运行结果:
例题
1.分别用迭代和递归的方式实现阶乘
阶乘!指的是所有小于以及等于改数的正整数的积
列如5的阶乘为:5*4*3*2*1=120
迭代:
(这里我用的是IDLE交互式运行的,因为文件式的我运行不返回结果 用print(result) 可以打印出来,目前我还没找原因)
def funC(n):
result = n
for i in range(1,n):
result *= i
return result
funC(5)
运行结果
递归:
def funD(n):
if n == 1:
return 1
else:
return n * funD(n - 1)
funD(5)
运行结果
2.分别使用迭代和递归实现斐波那契
迭代实现斐波那契数列
def funE(n):
a = 1
b = 1
c = 1
while n > 2:
c = a + b
a = b
b = c
n -= 1
return c
funE(12)
运行截图
递归实现斐波那契数列
def funF(n):
if n == 1 or n == 2:
return 1
else:
return funF(n-1) + funF(n-2)
funF(12)
运行结果
如果使用递归方式传入的值过大,可能会运行加载很长时间,因为每次调用递归不会立即返回结果,而是等到最底层的代码执行完,然后再一层一层的往上走。比较耗费资源,而迭代就不会这样。