满意答案
公元1699年
推荐于 2018.04.05
采纳率:46% 等级:12
已帮助:10767人
正确的程序应5261该这样写
void hanoi( int n,char one ,char two,char three)
{
if( n==1 )
{
move( one,three);
}
else
{
hanoi( n-1, one, three, two);
move( one, three);
hanoi( n-1, two, one, three);
}
}
解释:
将 n 个塔牌从 one 经过 two 全部移动4102到 three
{
如果 n == 1 那么
{
将那个塔牌从 one 移动到 three;
任务完成!
}
否则
{// 就至少需1653要三步了
将 n-1 个塔牌从 one 经过 three 全部移动到 two // 此过程结束后,塔牌数量为 [1, n-1, 0]
将 one 移动到 three // 过过程结束后,塔牌数量为 [0, n-1, 1]
将 n-1 个塔牌从 two 经过 one 全部移动到 three // 过过程结束后,塔牌数量为 [0, 0, n]
}
}
通过 n=3 来跟踪,展开会好理解些,下面就是执行过程的展开,// 后面会用{}来展开,不要怕难,使用文字缩进,跟踪读下去:
hanoi(3, one, two,three)
{
//hanoi( 2, one, three, two);
{
//hanoi( 1, one, two, three);
{
move( one, three);
}
move( one, two);
//hanoi( 1, three, one, two);
{
move( three, two);
}
}
move( one, three);
//hanoi( 2, two, one, three);
{
//hanoi( 1, two, three, one);
{
move( two, one);
}
move( one, two);
//hanoi( 1, one, two, three);
{
move( one, three);
}
}
}
20分享举报