递归
今天学习的问题是:递归是什么?
文章中的图片以及一些观点:来自小甲鱼python课程
什么是递归
图1
从一道题目开始入手:
图2
递归代码如下:
递归算法
def factorial(n):
if n==1:
return 1
else :
return n * factorial(n-1)
number = int(input(‘请输入一个正整数:’))
result = factorial(number)
print(‘%d的阶乘是:%d’%(number,result))
对于该程序的解释:
当n=5时,得到else 条件
所以变成 5* factorial(4)
当n=4时,得到else条件
变成4*factorial(3)
当n=3时,得到else条件
变成3*factorial(2)
当n=2时,得到else条件,变成2*factorial(1)
直到n=1 factorial(1)返回1
所以2*factorial(1)变成2*1
3*factorial(2)变成3*2*1
4*factorial(3)变成4*3*2*1
5*factorial(4)变成5*4*3*2*1
所以外层为:
图3
注意点:
在使用递归中:1)有调用函数的过程 2)有正确的返回
否则,递归忘记返回,就会有危险,陷入死循环中,一直占用内存,其具有危险性。
上课(艾瑞上课的代码)
使用递归实现0到100求和
def fun3(s,i):
return s if i==0 else fun3(s+i,i-1)
print(fun3(0,100))
解题思路,刚开始, s=0,i=100
判断i是否为0,如果不是,则s+i,为100,i变为99
第二次,s+i,变为100+99,i变为98
依次类推,最后s变为100+99+98+…….+0
最后判断i=0,返回s