汉诺塔问题描述:
分析:
(1)move(n,a,b,c) a:原柱 b:辅柱 c:目标柱,输出移动步骤
(2)n=1 直接从a到c
(3)move(n,a,b,c) 分解为3个小问题:move(n-1,a,c,b); 直接从a到c;move(n-1,b,a,c);
总结:
优点:程序简洁,可读性强
能解决一些非递归难以解决的问题。
缺点:占用较多的机器时间和存储空间 (保存现场、恢复现场)
解决问题的范围有限。
void move(int n,int a,int b,int c){
if (n==1) printf("%d-->%d\n",a,c);
else
{
move(n-1,a,c,b);
printf("%d-->%d\n",a,c);
move(n-1,b,a,c); }
}
int gcd(int m,int n){
int c;
if (n==0) c=m;
else
c=gcd(n,m%n);
return c;}
float ave(int a[],int n){
float m;
if (n==1) m=a[0];
else
m=(ave(a,n-1)*(n-1)+a[n-1])/n;
return m;}
上一页
[1]
[2]