腾讯面试题 递归运算

在这里插入图片描述
//递归过程: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");

}
也可以用循环来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值