递归的经典应用-汉诺塔问题
规则:汉诺塔是一个发源于印度的益智游戏。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘逐一按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。
问题:给定任意的盘子数量(柱子始终只有a、b、c 3根),需要多少个步骤才能完成大梵天的命令?具体应该如何移动?
VBA递归函数代码如下:
'汉诺塔问题解决方案
Function hanoi(n As Integer, a As String, b As String, c As String)
If n = 1 Then hanoi = "moving " & n & " from " & a & " to " & c & " "
If n > 1 Then hanoi = hanoi(n - 1, a, c, b) & Chr(10) & "moving " & n & " from " & a & " to " & c & " " & Chr(10) & hanoi(n - 1, b, a, c)
End Function
'汉诺塔问题解决步数
Function hanoistep(n As Integer)
If n = 1 Then hanoistep = 1
If n > 1 Then hanoistep = hanoistep(n - 1) * 2 + 1
End Function
[此贴子已经被作者于2022-9-29 14:17编辑过]