关于递归写法的精妙记录

来源:互联网 发布:UC浏览器mini java版 编辑:程序博客网 时间:2024/06/05 23:04

之前对递归的了解就限制于  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