汉诺塔问题
#include<stdio.h>void main()
{
void hanoi(int n,char a,char b,char c);
int n;
printf("请输入要移动的块数:");
scanf("%d",&n);
hanoi(n,'a','b','c');
}
void hanoi(int n,char a,char b,char c)
{
if(n==1)
printf("\t%c->%c\n",a,c);
else
{
hanoi(n-1,a,c,b);
printf("\t%c->%c\n",a,c);
hanoi(n-1,b,a,c);
}
}
这个程序是没问题的,实际的移动问题我是清楚的,但是这种递归程序的内部是怎么运行的我不太清楚,进行调试了也看不懂..因为也是一下子输出一堆...
比如说我以3为例子,输出中有一个c->b
比如说这个语句是怎么输出的啊...代码中哪个语句输出了这个内容啊...,可以的话以3为例子..一个输出一个输出的说一下呗..不行的话,大概说一下也行,我再看看..谢谢了~
石沉大海... 递归不是把问题复杂化,而是使编程更符合人类的思维方式。
我们把三根柱子分别作为“起点”、“临时”和“目标”。目的是把n个圆盘从“起点”移到“目标”。
1,首先,把上面n-1个移到“临时”上,至于怎么移,等会儿再说。
2,然后把第n个移到“目标”上,这步是实打实的移动,所以用printf
3,最后再把上面n-1个移到“目标”上。完成全过程。
1和3怎么移动,这里就用到了递归,只是“起点”、“临时”和“目标”变化了。 想了解内部是怎么运行 提升知识,学一下汇编 冬雪雪冬 发表于 2017-7-31 16:49
递归不是把问题复杂化,而是使编程更符合人类的思维方式。
我们把三根柱子分别作为“起点”、“临时”和“ ...
还是不懂..就像我说的..第三个输出为什么会是c->b啊 ba21 发表于 2017-7-31 18:54
想了解内部是怎么运行 提升知识,学一下汇编
好吧..我先把c的基础学完再说吧.. 野良神yls 发表于 2017-7-31 19:38
还是不懂..就像我说的..第三个输出为什么会是c->b啊
还是做个图吧,你看看移动的次序。
冬雪雪冬 发表于 2017-7-31 21:56
还是做个图吧,你看看移动的次序。
明白了,我对hanoi函数中abc的理解有误,我还以为比如 hanoi(2,a,c,b)执行后是hanoi(1,a,c,b)..原来后一个函数对应的是前一个函数中的abc.
谢谢大佬了~
哈哈{:5_106:}
页:
[1]