汉诺塔c语言程序代码

时间:2022-05-19 22:27:16 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
汉诺塔 c 语言程序代码(通过 vc++6.0 验证)(附讲解) 让我们先看看代码吧

#include

int hj(int a,int b, int c,int i)

{



int t; if(i==1)

printf("%d->%d\n",a,c); else {t=c; c=b;

b=t; hj(a,b,c,i-1); printf("%d->%d\n",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;

}

以上是汉诺塔的代码,该程序主要是运用了递归的思想,比如数学中的 在本程序中为: int

hj(int a,int b, int c,int i)

f(x)=f(x-1)+f(x-2) {



int t; if(i==1) printf("%d->%d\n",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 1->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",a,c); else {t=c; c=b;(交换值) b=t;

hj(a,b,c,i-1);

printf("%d->%d\n",a,b); t=a; a=c;

c=t; ( a c 交换) t=b; b=c;

c=t; ( b c 交换) hj(a,b,c,i-1);


本文来源:https://www.wddqw.com/doc/b94a4d05af51f01dc281e53a580216fc710a5359.html