您的位置:首页 > 编程语言 > Python开发

Python随记(7) 递归

2020-03-29 19:43 1191 查看

递归

  1. 函数调用自身的行为
def sum(n):
if n <=0:
return 'sorry,must be >=1'
if n == 1:
return 1
return n * sum(n-1)
print(sum(100))     #求100 * 99 *98.。。。。。。*1
  1. 递归过程解析:递归分成两部分,递,归。以上面的阶乘为例,sum(3)>>3*sum(2) sum(2)>>2*sum(1) sum(1)==1 递时不会直接计算出每一个值然后相乘。 归:从最底层开始回到调用者,1>> 1*2>> 1*2*3
def digui(n):
print(n,'递')
if n>0:
digui(n-1)
print(n.'归')
digui(3)  >>>3 递 2 递 1 递 0 归 1 归 2 归 3 归
def get_num(num):
if num > 2:
get_num(num - 1)
else:
print(num)

get_num(4) # 输出结果为 2

'''
解析一下:加了else后,首先代码区有两个分支,
在num>2时,执行会有递归,当n=4 是开辟一层空间;
n=3时开辟一层空间,此时 get_num(2) 再开辟一个空间,
当它从上往下执行过程中,在他本层空间遇到if num>2 不成立,所以走分支 else,直接打印出来;
此时代码还没结束,回到上一层空间,num=3, num>2 已经进入了if 不会走else,
num=4 也不会走else,所以这两层空间没有值输出!
'''
————————————————
版权声明:本文为CSDN博主「storyfull」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/storyfull/article/details/102671946

(找了好多文章,就上面这个写的详细,我就不一点一点搬运了。。好好研究加深见解吧。。。脑部链接

  1. python对递归深度是有限制的,但是如果要写爬虫,就要自行设置递归的深度限制了
    improt sys sys.setrecursionlimit(10000)#将深度设置为10000层
    。但是递归的话每次调用函数都要进行栈操作,非常消耗时间和内存。递归用在妙处自然简洁
def max_value(ls,rs):
for l in ls:
if type(l) == list:
rs = max_value(l,rs)
continue
if l > rs:
rs = l
return rs
def max_val(ls):
rs = max_value(ls,0)
return rs
if __name__ == '__main__':
list1 = [4,1,3,11,[1,6,8],[[1,3],[6,15]]]
list2 = [5,[5,7,9,2],3,[2,6,16],9]
result1 = max_val(list1)
result2 = max_val(list2)
print('list1:%r\nMAX:%s\nlist2:%r\nMAX:%s' %(list1,result1,list2,result2)
————————————————
版权声明:本文为CSDN博主「LeeGene..」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42279077/article/details/82897118

这个递归进子列表的例子就很棒啊,以后在文件系统时也会用到递归去进入子文件。
4.

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

def years(n):
if n == 1:
return 10
else:
return years(n-1) + 2

斐波那契数列的递归问题:

def fab(n):
if n < 1:
print('输入有误!')
return -1
elif n == 1 or n == 2:
return 1
else:
return ferber(n-1)+ferber(n-2)
  • 点赞
  • 收藏
  • 分享
  • 文章举报
AI路漫漫 发布了25 篇原创文章 · 获赞 0 · 访问量 348 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: