python 递归函数_python笔记22:两个小例子弄明白-递归函数

主要内容:

  • 小目标:掌握递归函数
  • 主要内容:递归函数原理,递归函数应用

如果看完这篇文章,你还是弄不明白递归函数;

你来找我,我保证不打你,我给你发100的大红包。

1. 递归函数

递归函数:函数自己调用自己

  • 一个伪代码:
def func(value):    if 判断条件:        #函数自己调用自己        func()    ...func()

递归函数关键点:

1.函数自己调用自己;

2.调用结束条件;

3.注意递归层数不能太多,否则,可能会报异常;

2. 实现阶乘

  • 需求:N的阶乘:N!=N*(N-1)*(N-2)...2*1 实现5的阶乘

2.1 循环实现

  • while语句实现
def factorial(n):    value = 1    while n > 1:        value *= n        n -= 1    return valuefactorial(5)

结果:120

  • for语句实现:
def factorial(n):    value = 1    for i in range(5,1,-1):        value *= i    return valuefactorial(5)

结果:120

2.2 递归实现

  • 使用递归实现N阶乘
def factorial(n):    print(n)    #递归结束条件n = 1结束    if n > 1:        # n*n-1,理解factorial调用自己        return n * factorial(n-1)    return nfactorial(5)

结果:

54321120
  • 分析:
第一轮:5*factorial(5-1)第二轮:4*factorial(4-1)第三轮:3*factorial(3-1)第四轮:2*factorial(2-1)第五轮:返回1然后依次计算,结果:1*2*3*4*5=120

如下图

9bff40f8666efc0b7e7e5ca3c9ffe424.png

递归流程

  • 问题:将n设置一个较大数字报异常:
RecursionError: maximum recursion depth exceeded in comparison

递归函数遍历多维列表

需求:遍历多维数字列表,将所有偶数添加到新列表中。

listv = [1,2,3,[4,6,7,8,[10,21,22]]]
  • 问题:列表中是还有列表,这个怎么做?
  • 使用递归一个函数就搞定了
  • 代码实现:
def findEven(src,dest):    for item in src:        if isinstance(item, list):            #当前元素为列表,继续调用            findEven(item, dest)        elif item%2==0:#求余            dest.append(item)listv = [1,2,3,[4,6,7,8,[10,21,22]]]dest = []findEven(listv, dest)print(dest)

结果:

[2, 4, 6, 8, 10, 22]

总结:

递归函数要点:

  1. 自己调用自己,
  2. 注意结束条件与调用深度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值