/*
基本思路: 只有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);
}
}
我参考了两位大佬的代码,其中一位是日本的专业程序员。比较有意思的是他出的面向要考试的群体的那本书讲了这个,后来大概卖得不好。读者有人评价太难,在后来又出了一版面向新手的书后,在递归这个问题上就轻轻带过了。
网友评论