c语言6-4十进制转换二进制递归,C语言函数递归问题

我一步步的给你讲,就会懂啦: 首先hanoi函数如果把当中的move函数给去掉,就变成了: void hanoi(int n, char one , char two, charthree){ if(n == 1) printf("%c->%c

", one, three); else { hanoi(n - 1, one, three, two); printf("%c->%c

", one, three); hanoi(n - 1, two, one, three); }}也就是把move(one,three),变成了printf("%c->%c

", one, three);。

少了一个函数,更加清晰 所以这里的hanoi函数就有了执行的内容:printf 下面以3个盘子为例进行模拟计算机的执行过程: 1、hanoi(3,A,B,C),开始了这步,进入第一层函数,计算机在函数中会进行自我的再次调用(第7行代码) 2、(第7行):hanoi(2,A,C,B),于是这又是一个新的hanoi函数,这里我把它成为第二层函数 同样执行到第7行,卡住了,再次一次自我的调用 3、(进入第三层函数):hanoi(1,A,B,C),这里的第三层n=1,所以在第四行就显示出了"A->C",至此,第三层函数结束,回到调用他的第二层函数 4、在第二层当中,继续第8行的内容,所以显示出"A->B",继续运行,到第9行,开始了有一次自我调用 5、把她称为贰号第三层函数吧。

。。hanoi(1,B,A,C),和第3步类似,这一层函数显示出了"B->C",然后结束函数,返回调用它的第二层函数 6、第二层函数执行完毕,返回调用它的第一层函数 7、第一层函数中执行到第8行,显示出"A->C",然后执行第9行:hanoi(2,B,A,C) 。

。。。。。。。。。。。 如果看到了这里理清楚了关系就会懂啦,接下来还有一半,如果都写下来就太复杂了-。

- 你所说的空函数是指没有返回值,但是这里利用的是电脑调用函数的那种关系来解决的问题,比如上面的3步,会自动返回到第二层函数并继续 还可以这样理解汉诺塔,汉诺塔其实是将复杂的问题简单化, 先不管他有多少个盘子从A到C,我只把它视作3步 就像上面那样找个例子,反复的按照代码模拟计算机运行,过个五次六次,就会懂啦。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值