python学习记录——递归

递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。

在使用递归时,需要注意以下几点:

  • 递归就是在过程或函数里调用自身
  • 必须有一个明确的递归结束条件,称为递归出口。

注意: 切勿忘记递归出口,避免函数无限调用。

实例

使用递归实现阶乘计算:

使用迭代实现

现在,使用迭代来实现。

使用迭代来实现汉诺塔游戏

汉诺塔主要是有三个塔座X,Y,Z,要求将从小到大编号为 1,2.....n 的圆盘从X移动到塔座Z上,要求

       1、每次只能移动一个圆盘

       2、圆盘可以插到X,Y,Z中任一塔座上

       3、任何时候不能将一个较大的圆盘压在较小的圆盘之上

       4、初始:所有圆盘都在 X 塔座,并且最大的圆盘在最底部,然后是次大的

       5、结束:所有圆盘都在 Z 塔座,并且最大的圆盘在最底部,然后是次大的 

 递归算法:

        n == 1时,把盘1从X移动到Z

        当n > 1时

                     1、将n-1个圆盘(每次移动一个)从X移动到临时塔Y

                     2、将盘n从X移动到目的地Z

                     3、将n-1个圆盘(每次移动一个)从临时塔Y移动到目的塔Z

(实际理解为,每次移动盘子,都是将盘子从X移动到Z。所以将n-1个圆盘从X移动到临时塔Y,这一步操作中将Y理解为Z,即调用本身时传入的Y为Z,所以盘子是从X移动到Z;同理将n-1个盘子从临时塔Y移动到Z时,理解为Y为X,即调用本身是传入的Y为X,所以盘子还是从X移动到Z)

结果如下:

递归的优缺点:

优点:

  • 递归使代码看起来更加整洁、优雅
  • 可以用递归将复杂任务分解成更简单的子问题
  • 使用递归比使用一些嵌套迭代更容易

缺点:

  • 递归的逻辑很难调试、跟进
  • 递归调用的代价高昂(效率低),因为占用了大量的内存和时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值