c语言算法-汉诺塔

一、代码

#include<stdio.h>
void hanoi(int n,char A,char B,char C)//这里的ABC始终是形参
{
    if(n==1)//移动
    {
       printf("%c->%c\n",A,C);//第一个参数是源,第二个参数是目标
    }
    else
    {
        //这里的ABC是实参
        hanoi(n-1,A,C,B);//将上面的n-1从A移到B,根据上面的移动的参数,A是源,B是目标。
        hanoi(1,A,B,C);//将在最后一个直接移动
        hanoi(n-1,B,A,C);//将刚才移动的n-1,从B移动到C
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    hanoi(n,'A','B','C');//把n个汉诺塔从A(源)移动到C(目标);

}

二、总结

1.先把n-1从A(源)移到B(目标)(借助C),再把最后一块直接移动到C。(但是上一个步骤中,如何把n-1移动到B?这又是一个汉诺塔)。然后把n-1从B移动到C(借助A),那么如何实现?这又是一个汉诺塔

2.注意递归中,形参和“实参”。

猜你喜欢

转载自blog.csdn.net/zhanxiaoyier/article/details/79328412