数据结构(Python) —— 【04 递归】

递归

递归应该放在汉诺塔问题之前讲的,因为汉诺塔问题就是用递归解决的,所以今天补上!
递归是个很基础的知识点,我记得大学C语言的前面就讲了递归,可见递归是个简单却又重要的知识点!
递归的具体文字解释,我就不说了,简单来说,递归就是不断调用自己,直到达到终止条件。
所以, 递归的两个特点: 调用自身、结束条件
我就简单句几个例子说明一下:

1. def func1(x):
       print(x)
       func1(x-1)

没有结束条件,我们都不知道到递归什么时候结束,所以不是合法的递归

2. def func2(x):
       if x > 0:
          print(x)
          func2(x+1)

看似有结束条件x>0,即当x<=0时结束,但x+1会永远大于0,即依然不会结束,故相当于没有结束条件,不是合法的递归
所以,递归是否有结束条件,不能只看代码里是否有判断条件,还要结合代码,判断递归结束条件是否有效

3. def func3(x):
       if x > 0:
          print(x)
          func3(x-1)

是合法递归

用递归计算阶乘

n的阶乘=nx(n-1)x(n-2) x…x2x1
比如5的阶乘即为5x4x3x2x1=120
下面看看代码:

def func(n):
    s = 0
    if n == 1:
        return 1
    else:
        s = n * func(n - 1)
    return s

先定义s,来存储阶乘的乘积,再加结束条件。因为阶乘最多就是乘到1,所以我们判断当n减到1时,就返回1,不然就一直调用自己本身。

举个栗子——5:
5≠1,所以此时s=5*func(4);
再看func(4):
n=4≠1,所以func(4)=4*func(3),此时s=5*4*func(3);
再看func(3):
n=3≠1,所以func(3)=3*func(2),此时s=5*4*3*func(2);
再看func(2):
n=2≠1,所以func(2)=2*func(1),此时s=5*4*3*2*func(1);
再看func(1):
n=1,则此时函数返回1,即func(1)=1,所以此时s=5*4*3*2*1=120

再用程序验证一下:

def func(n):
    s = 0
    if n == 1:
        return 1
    else:
        s = n * func(n - 1)
    return s
print(func(5))

结果为120,正确!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值