递归与递推的区别

递推与递归的核心都是同一个“递推公式”,只不过入手的方向不一样。

我们正常的思路就是递推:由已知的1根据递推公式推出2,由2推出3,由3推出4……直到求得题目要求的第n项,是从1---->n。

而递归,是从n---->1---->n。它是使用计算机工具时的一种技巧,其实还是解上面这个问题,但是把第n项与第n-1项的关系写出来就可以,具体来说就是这句:return (f(n - 1) + 1) * 2;思路好办,最后想求出结果还得落实到第一项,因为第一项是已知的,比如=1,加上这句: if (n==1)return 1;就写完了。对比以下代码:

#include <iostream>
using namespace std;

int f(int n) {            //递推函数写完,一会儿调用一下就OK了。
    if (n==1)return 1;
    return (f(n - 1) + 1) * 2;
}

int main() {
    int n;                //递推,求第n项,这个根据题目自己输入,a=1是第一项的值。
    cin >> n;
    int a = 1;
    for (int i = 1; i < n; i++)
        a = (a + 1) * 2;        //核心——递推函数
    cout << a << endl;
//------------------------------
    cout << f(n) << endl;    //递归
}

基本说清楚了吧?

以上这道题最简单,递归先压栈,再弹栈,压入的过程占用了很多内存,比起递推就差着了,从弹栈开始其实就是递推的过程——从1到n的过程。所以没有必要用递归就别用。但是以后遇到复杂问题时,递归代码很好写,这是它的优点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值