Python随记(7) 递归

递归

  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)  >>>3210123
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)
发布了25 篇原创文章 · 获赞 0 · 访问量 308

猜你喜欢

转载自blog.csdn.net/weixin_46192930/article/details/104811410