//递归过程:5依赖于4的结果。4依赖于3的结果,3依赖于2的结果,2依赖于1的结果,1依赖于0的结果
任何循环都可以转换成递归,但是递归不能转换循环。
楼梯有50阶,一次可以走一步,也可以走两步,问:从0走到50有多少种可能。
思考:1: 一个台阶有几种可能:1 ,1,一种可能
2:两个台阶有几种可能:11,2,两种可能
3:三个台阶有几种可能:111,12,21,3种可能
4:四个台阶有几种可能:1111,121,112,221,22,5种可能
走50台阶有两种可能,要不从48走上来,要不从49走上来;要从49走上来,得要从47,48走上来。总结:我走到4步的可能,是走3和2的可能之和,我走到50步的可能,是走48和49的可能之和, 腾讯在这里有一个坑,要是数字是50,结果会很大,大到溢出了,计算出50,最少需要10分钟,换成double
//用递归实现,1+=5,也可以用递归实现1+到100
//递归过程:5依赖于4的结果。4依赖于3的结果,3依赖于2的结果,
//2依赖于1的结果,1依赖于0的结果
//第4个台阶是前面两个加起来的可能,
int tencent(int n)
{
if (n1)//如果n1,我们返回一个台阶
{
return 1;//返回,不再执行
}
else if (n2)//如果n2,我们返回2个台阶
{
return 2;
}
else//其余情况,我们
{
return tencent(n - 1) + tencent(n -2);
}
}
void main()
{
printf("有多少种可能=%d",tencent(10));
system("pause");
}
正确的:
double tencent(int n)
{
if (n1)//如果n1,我们返回一个台阶
{
return 1.0;//返回,不再执行
}
else if (n2)//如果n2,我们返回2个台阶
{
return 2.0;
}
else//其余情况,我们
{
return tencent(n - 1) + tencent(n -2);
}
}
void main()
{
printf("有多少种可能=%f",tencent(3));
system("pause");
}
也可以用循环来实现