汉诺塔怎么个递归调用?

来源:百度知道 编辑:UC知道 时间:2024/09/23 07:20:11
看到汉诺塔编程题目,知道用什么方法,就是用递归调用,我也看得到怎么调用的,但是不知道调用之后,怎么层层退出函数来。 是不是主程序中调用函数期间,主程序就等在调用处,不执行主程序的其他代码了??
如果要编写一个类似 汉诺塔 的题目,那似乎不太可能做得到啊。难道不断编程,到最后就可以作到? 还是,只要了解了递归的思维,就可以编出来

每调用一次就把把当前下一步要执行的代码地址放入栈中,当前状态放入栈中(保护现场)

当调用的函数执行完过后,就根据栈中的数据恢复(恢复现场), 这要调用完过后就可以继续执行了
举个简单的例子
(注意这个例子并不严格,只能这样说:本例子把函数怎么返回说了个大概,如果是真正的汇编,说起来有点麻烦)
如果还有不明白的请加QQ群:17178275

0: 函数名(参数 n)
1: 如果 n == 1
2: 那么 返回值 = 1
3: 否则 返回值 = n * 函数名(n-1)
4: 函数结束

5: 主程序开始
6: 函数名(3)
7: 主程序结束

执行过程:
从主程序开始执行到 6时,调用函数,下一条语句的地址是7,所以把7放入栈,(表示为 stack:7)

把3赋给n,
执行语句1
执行语句3,调用函数把下一条语句4放入栈中,把当前状态n=3放入栈中
(表示为 stack:7,4,3)

把2赋给n
执行语句1
执行语句3,调用函数把下一条语句4放入栈中,把当前状态n=2放入栈中
(表示为 stack:7,4,3,4,2)

把2赋给n
执行语句1
执行语句2,返回值为1
执行语句4,返回1

由于stack:7,4,3,4,2所以根据后面的4,2执行下面的操作
把2赋给n,把上面的返回值1和n相乘得2,把2赋给返回值
执行语句4,返回2

由于stack:7,4,3所以根据后面的4,3执行下面的操作
把3赋给n,把上面的返回值2和n相乘得6,把6赋给返回值
执行语句4,返回6

由于stack:7
所以返回到语句7处执行,主程序结束