递归——汉诺塔问题

2020-04-16  本文已影响0人  psh_11
/*
基本思路: 只有1个盘子,从第一个柱子移动到第三个柱子

         有n个盘子
           把n-1个盘子,从第一个柱子移动到第二个柱子
         剩下的1个盘子,从第一个柱子移动到第三个柱子
           把n-1个盘子再从第二个柱子移动到第三个柱子
*/

#include <stdio.h>

void yidong(int , int , int , int );

int main(void)
{
    int n;
    printf("请输入圆盘的个数:");
    scanf("%d",&n);
    yidong(n, 1, 2, 3);
    
    return 0;
}

void yidong(int n, int one, int two, int three )
{
    if (n == 1)
        printf("从第%d个柱子移动到第%d个柱子\n", one, three);
    else
    {
        yidong(n - 1, one, three, two);
        printf("从第%d个柱子移动到第%d个柱子\n", one, three);
        yidong(n - 1, two, one, three);
    }
}

我参考了两位大佬的代码,其中一位是日本的专业程序员。比较有意思的是他出的面向要考试的群体的那本书讲了这个,后来大概卖得不好。读者有人评价太难,在后来又出了一版面向新手的书后,在递归这个问题上就轻轻带过了。

上一篇 下一篇

猜你喜欢

热点阅读