def fun(n, a, b, c):
if n:
fun(n - 1, a, c, b)
print(a + "->" + c)
fun(n - 1, b, a, c)
n = (int)(input("请输入需要从A到C的盘子数:"))
fun(n, 'A', 'B', 'C')
运行测试:输入3, 下面是打印的结果
--------------------------------------------
请输入需要从A到C的盘子数:3
A->C
A->B
C->B
A->C
B->A
B->C
A->C
汉诺塔是大家所熟知的一个东西。打印移动过程,首先输入一个正整数n,调用fun函数,函数参数列表的a,b,c表示,需要从a柱借助b柱移动到c柱。
递归需要一个递归出口,这里的递归出口写的较为简洁,它的本意是:如果n不为0就执行下面的内容。
n为3,让a上的2个盘子,借助c,移动到b盘,然后我再让a剩下的一个盘子移动到c,最后让b上的2个盘子借助a柱移动到c柱,这样就成功解决我们的问题。它的过程就是,既然我们要把n个盘子从a柱移动到c柱,那么就需要我们先把a柱上,n-1个盘子借助c柱全部移动到b柱,这样的话,我们a上剩余最大的盘子就可以直接由a移动到c柱,最后b还有n-1个盘子需要我们借助a柱移动到c柱,既然我们能实现第n个步骤的过程,那么我们也能实现第n+1和n-1的过程,所以我们要实现将n-1个盘子从b柱移动到c柱,就要把n-2个盘子借助c柱移动到a柱。还是那句红色的话,因为我们参数列表的意义就是这样(函数参数列表的a,b,c表示,需要从a柱借助b柱移动到c柱),所以才能让每次打印输出的时候,导致有一个柱子上的单独的盘子,直接移动到目标柱子!
要理解递归实现递归,首先就是要理解他是怎样的思想!读者可细品上述红色的句子,更有助于进一步理解和进阶.