#include<stdio.h>
main()
{
  hanoi(3,'A','B','C');
}hanoi(n,a,b,c)
int n;
char a,b,c;
{int i=1;
if(n==1) printf("%c=>%c\n",a,c);
  else
  {
  hanoi(n-1,a,c,b);
     printf("%c=>%c\n",a,c);
 hanoi(n-1,b,a,c);
  }
}
这里到底是怎么调用的。每一步是怎么执行的,小弟很是不懂!C递归

解决方案 »

  1.   

    网上很多资料可以参考。
    先把逻辑搞明白。
    如果脑子转不过来,就用一个小实例跟着代码走一遍看看,然后你可以玩玩hanoi塔的小游戏,加深理解。
      

  2.   

    google 汉诺塔,会有很多很详细的讲解。
      

  3.   

    如果你有一些数学归纳法的知识,也就是说大学基础数学支持,就可以立刻理解这样的解释:你可以想象一下,假设在三根柱子上移动n个盘子,从a到b柱子(这里n、a、b、c都是数学变量),那么就等于是:首先将n-1个盘子先移动到c,然后把最大的那个盘子从a移动到b,最后再把n-1个盘子从c移动到b。由于n这个变量的值是收敛的,因此知道此算法总归会在n=1时收敛结束。只需要给出这个推导公式,就可以归纳推理出“它是可行的计算”。其中打印每一步的n、a、b、c四个变量的值,就是跟踪的状态堆栈。凡是数学归纳法进行推导,总是自顶向下发现结果的,而不是从底层向上拼凑结果的。
      

  4.   

    关于“调用”,你应该学习数据结构中关于“堆栈”的概念,然后了解c语言函数使用堆栈来“进入”(Push各个参数)和“离开”(Pop各个参数以及返回值)函数体代码的方法,这大概跟理解hanoi塔模型所需要的想象力是一样的。
      

  5.   

    也可以参考这个文章理解下:http://suizouwuya.blog.163.com/blog/static/100708329201192693329112/
      

  6.   

     程序里面形参的调用,怎么会执行到B=>C?
      

  7.   

    在else里面的第一个调用hanoi(n-1,a,c,b);的时候是会直接返回函数开始执行下一次的调用还是执行了printff("%c=>%c\n",a,c);这一个输出后再去调用hanoi(n-1,b,a,c).还有形参之间会不会相互传值?