您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页汉诺塔c语言程序代码

汉诺塔c语言程序代码

来源:小侦探旅游网
汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解) 让我们先看看代码吧 #include

int hj(int a,int b, int c,int i) { int t; if(i==1) printf(\"%d->%d\\n\ else {t=c; c=b; b=t; hj(a,b,c,i-1); printf(\"%d->%d\\n\ t=a; a=c; c=t; t=b; b=c; c=t; hj(a,b,c,i-1); return 0; } }

main() {

int a,b,c,i; a=1; b=2; c=3;

printf(\"请输入汉诺塔的盘数\"); scanf(\"%d\hj(a,b,c,i); return 0; }

以上是汉诺塔的代码,该程序主要是运用了递归的思想,比如数学中的f(x)=f(x-1)+f(x-2),在本程序中为:int hj(int a,int b, int c,int i) { int t; if(i==1) printf(\"%d->%d\\n\ else {t=c; c=b;

b=t; hj(a,b,c,i-1); 也就是说,我们在这个函数中再次调用这个函数,相当于一个循环,而在再次调用的过程中,i的值变成i-1,就类似于f(x-1),这样层层调用,最终就变成当i=1的时候的值,然后通过运算,计算出想要得到的值。 汉诺塔的数值分析:

我们可以发现,当只有一个盘的时候,我们只需要做1->3(就是把第一个柱子上的最顶端的盘移动到第三根柱子,以下不再解释) 当有两个盘的时候,是1->2 1->3 2->3

三个盘子是:1->3 1->2 3->2 1->3 2->1 2->3 分析一下可以得出以下结论: 初始值a=1 b=2 c=3 一个盘子就是a->c

两个盘子与一个盘子的关系是:

第一步:b与c交换值,然后打印a->c 第二步:打印a->b

第三步:a与c交换值,b与c交换值,打印a->c 进一步分析,便可以得出以下结论 只要盘子数量为i(i大于1),那么它就有三部分 第一部分,b与c交换值,然后运行i-1 第二部分,打印a->b

第三部分,a与c交换值,b与c交换值,然后运行i-1 程序表示便是: if(i==1) printf(\"%d->%d\\n\ else {t=c; c=b;(交换值) b=t; hj(a,b,c,i-1); printf(\"%d->%d\\n\ t=a; a=c; c=t;(a c交换) t=b; b=c; c=t;(b c交换) hj(a,b,c,i-1);

1->3

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务