汉诺塔递归问题,希望有人帮我解答
为什么当n-1=1的时候,函数参数变成了H(1,A,B,C),传入的不还是A,C,B么。求讲解,
就这一点递归没看明白,谁能讲解一下感激不尽。 递归 C 算法
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出
会不会导致堆栈溢出
[解决办法]
不是三言两语就能说的清楚的!
看看这里吧,详细介绍
汉诺塔算法
[解决办法]
别看那个图,没看到递归函数中有2次递归么,那个图只有1次。
自己简单的做个实验就行了。
假设有3个硬币,从A要移动到C
第一步: 把 上面2个硬币从A移动到B,用C做中转( 递归 n-1, A B C)
第二步: 把 3移动到C (打印 n:A-->C)
第三步: 把B上的2个硬币从B移动到C,用A中转 (递归 n-1, B C A)
很简单吧。
注意递归的结束条件。