汉诺塔c语言程序
printf(“%d->%dn”,a,c);else {t=c;c=b;b=t;hj(a,b,c,i-1);printf(“%d->%dn”,a,b);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”,&i);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->%dn”,a,c);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->%dn”,a,c);else {t=c;c=b;(交换值)
b=t;hj(a,b,c,i-1);printf(“%d->%dn”,a,b);t=a;a=c;c=t;(a c交换)
t=b;b=c;c=t;(b c交换)
hj(a,b,c,i-1);不明加QQ765233918(请写清备注)
【汉诺塔c语言程序】推荐阅读:
幼儿园大班语言:绘本阅读《克里克塔》11-01
c语言递归程序11-06
c语言设计程序11-11
c语言源程序10-03
c语言程序期末试卷09-22
c语言总结07-15
c语言概念题09-22
C语言教学建议10-25
c语言程序设计作业三06-24
C语言图形程序设计报告10-13