关于递归写法的精妙记录

之前对递归的了解就限制于  n! 之类的用法,在学习Python的过程中,接触到了关于汉诺塔的移动的递归介绍觉得递归实在是神奇。这种思想的迸发我希望能记录下来,并激励。

有A,B,C三个柱子,所有的圆盘都放在A上面(具体的规则请百度汉诺塔)。


def move(n, a, b, c):
    if n ==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')
编程语言是 Python

这里对圆盘的移动的分析是: 如果A有N个圆盘,可以把A看做是 N 和 (N-1)的集合,现在就是要把 (N-1) 移到B上面,再把A的N移到C上。在之后就以B为A(即为起始柱子),A为B (即为备用柱子)。 问题变成了B看做(N-1)和(N-2)的集合,现在把(N-2)移到A,再把B中的(N-1)移到C上。此时 A B 状态返回开始状态继续循环。


递归思想有点不同于我的常规想法,仅以记录,看到的时候能够提醒自己开拓思维。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值