/*
*Copyright(c++)2015,烟台大学计算机与控制工程学院
*All rights reserved
*文件名称:text.cpp
*作者:纪冬雪
*完成日期:2015年9月14日
*版本号:v1.0
*问题描述:用递归求解汉诺塔问题
*输入描述;无
*输出描述:盘子需要移动的次数
*/
这是四个盘子的时候:
#include <stdio.h>
#define discCount 4
long move(int, char, char,char);
int main()
{
long count;
count=move(discCount,'A','B','C');
printf("%d个盘子需要移动%ld次\n", discCount, count);
return 0;
}
long move(int n, char A, char B,char C)
{
long c1,c2;
if(n==1)
return 1;
else
{
c1=move(n-1,A,C,B);
c2=move(n-1,B,A,C);
return c1+c2+1;
}
}
<img src="https://img-blog.csdn.net/20150914163059741?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
这是十六个盘子的时候:
#include <stdio.h>
#define discCount 16
long move(int, char, char,char);
int main()
{
long count;
count=move(discCount,'A','B','C');
printf("%d个盘子需要移动%ld次\n", discCount, count);
return 0;
}
long move(int n, char A, char B,char C)
{
long c1,c2;
if(n==1)
return 1;
else
{
c1=move(n-1,A,C,B);
c2=move(n-1,B,A,C);
return c1+c2+1;
}
<img src="https://img-blog.csdn.net/20150914163407961?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
这是二十四个盘子的时候:
#include <stdio.h>
#define discCount 24
long move(int, char, char,char);
int main()
{
long count;
count=move(discCount,'A','B','C');
printf("%d个盘子需要移动%ld次\n", discCount, count);
return 0;
}
long move(int n, char A, char B,char C)
{
long c1,c2;
if(n==1)
return 1;
else
{
c1=move(n-1,A,C,B);
c2=move(n-1,B,A,C);
return c1+c2+1;
}
}
<img src="https://img-blog.csdn.net/20150914163620302?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
这几个计算机运算都很快,接下来我又分别试了25,26,27,28,29,30个盘子,到27往后计算速度就越来越慢,到了30几乎等了两分钟
<img src="https://img-blog.csdn.net/20150914165024929?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150914165329956?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
总结:
一开始看不出差距,到后来差距越来越大。也从此看出了要在不同情况下选择不同的方法才能让我们编的程序高效有意义。