爱问知识人 爱问教育 医院库

C编程:汉诺塔问题:

首页

C编程:汉诺塔问题:

【问题】想问一下,程序是怎么运行到 
Hanoi(n-1,a,c,b);
下面的这两句的呢?
count
printf("%d Move dish %d : %c------>%c ",count,n,a,b);
我感觉程序永远都到不了这两句啊!
【代码】

#include
static count=0;
int Hanoi(int n,char a,char b,char c){
if(n>0){
Hanoi(n-1,a,c,b);
count ;
printf("%d Move dish %d : %c------>%c ",count,n,a,b);
Hanoi(n-1,c,b,a);
}
return 0;
}


int main(){
int n=3;
Hanoi(n,'A','B','C');
return 0;
}

提交回答

全部答案

    2018-10-10 01:33:17
  •   Hanoi(3,a,c,b)->Hanoi(2,a,c,b)->Hanoi(1,a,c,b)->Hanoi(0,a,c,b)//当n递减到0时,函数不再递归 
    ->a->c ->。
      。。。。
    ->Hanoi(1,c,b,a)->。。。。
    ->。
      。。。。
    ->。。。。。

    ->a->c
    ->Hanoi(2,c,b,a)->Hanoi(1,a,c,b)->。
      。。。
    ->a->c->。。。。
    ->Hanoi(1,c,b,a)->。
      。。。

    //总之只要有1个Hanoi()函数,就产生2个Hanoi()函数和一个输出语句,直到n递减到0后,终止函数的递归,函数返回0。上面的a,b,c在每次调用函数后,所处的位置都不一样。上面调用过程中没有正确给出a,b,c。
      只是想说明一下递归过程。
      并且可以肯定的说n必然减少到0,然后终止这一分枝的输出
    //当n减少到0后,判断 if(n>0)由于n=0,所以不执行if语句里面的内容,于是直接函数在这一支返回0,停止函数的递归调用
    //貌似这个递归调用很像数据结构中的树状结构
    //你要是学了数据结构,可能理解这个更容易一些。

    阶***

    2018-10-10 01:33:17

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 169-188
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):