C++递归
原创
©著作权归作者所有:来自51CTO博客作者jhtchina的原创作品,请联系作者获取转载授权,否则将追究法律责任
递归的目的是简化程序设计,使程序易读;
但是递归增加了系统开销 。时间上,执行调用与返回的额外工作要占用CPU时间。空间上,随着美递归一次,栈内存就多占一截;
非递归函数效率虽高,但比较难编程,而且可读性差
递归 求n!
//递归 求n!
//递归必须有结束递归的条件
//递归算法效率比较低,但是可读性好
long fact(int n)
{
if (n==1)
{
return 1;
}
return fact(n-1)*n;
}
long fac1(int n)
{
long result;
result=1;
for (int i=1;i<=n;i++)
{
result=i*result;
}
return result;
}
void recursive1()
{
cout<<fac1(6);
}
汉诺塔
//哈诺塔
//n个金片,从A针借助B针移动到C针
void move(char x,char y)
{
cout<<x<<"-->"<<y<<endl;
}
void hanoi(int n,char one,char two,char three)
{
if (n==1)
{
move(one,three);
}
else
{
hanoi(n-1,one,three,two);//将A座上n-1个盘子借助C座移动到B座上
move(one,three); //将A座上剩下的一个盘子到C座上
hanoi(n-1,two,one,three);//将n-1个盘子从B座借助A座移到C座上
}
}
void hanoi1()
{
int m;
cout<<"input the number of disks:";
cin>>m;
hanoi(m,'A','B','C');
}