递推和递归的区别

递推和递归都是用来解决递归问题的重要方法,主要的区别有:

  1. 递推是一种迭代的过程,递归是一种递归的过程。

  2. 递推通过循环逐步扩大问题规模,递归通过函数调用自身来扩大问题规模。

  3. 递推需要存储中间状态,通过当前状态推导出新状态,递归只需要当前输入。

  4. 递推的空间复杂度一般较小,递归需要堆栈空间,空间复杂度较大。

  5. 递推的时间效率一般较高,递归存在大量重复计算,时间效率较低。

  6. 递推代码较长,递归代码较简洁。

  7. 递推容易理解逻辑,递归需要展开调用栈来理解。

  8. 递推可以中途退出,递归必须到达退出条件。

总结一下:

递推通过循环迭代,递归通过自我调用,解决问题的本质思想不同。

递推效率更高,递归代码更简洁。

两者都可以求解递归问题,需要根据具体情况选择合适的方法。

掌握两种方法的区别和适用场景,可以更灵活地解决递归问题。

(来自chatGPT)

---------------------------------------------------------------------------------------------------------------------------------

我们来看递推和递归写斐波那契数列有什么区别:

递推:

long long a[47];
a[1]=a[2]=1;
for(int i=3;i<=46;i++){
    a[i]=a[i-1]+a[i-2];
}
cout<<a[40];

递归:

int f(long long a){
    if(a==1||a==2)return 1;
    else return f(a-1)+f(a-2);
}

递推一般都是用数组来存储小问题的结果,然后通过一番计算得出结果

递归一般都是用函数自己调用自己,调用的自己是用来解决规模较小的问题

也就是说,递推一般用数组存答案,递归一般用函数算答案

---------------------------------------------------------------------------------------------------------------------------------

递归和递推在实现上有些典型的区别:

  1. 递归通常是通过函数调用自己来实现的。函数内部会调用自身来处理子问题。

  2. 递推更多是通过数组来保存子问题结果,并通过循环迭代更新数组实现的。

但是,这些只是两种方法的典型实现方式,并不是绝对的区分标准。

递归不一定需要函数自调用,比如可以用栈模拟递归的过程。

递推也可以通过函数参数和返回值传递子问题结果,不一定需要数组。

所以更准确地说:

  1. 递归的关键是把问题拆分成子问题,通过子问题解决大问题。不一定需要函数自调用。

  2. 递推的关键是通过当前状态推导新状态。不一定需要数组,可以用其他方式传递状态。

函数自调用和数组只是两种典型的实现手段,不完全等同于递归和递推。

我们需要关注递归和递推的本质思想区别,而不是具体的实现形式。

总之,递归与递推的关键区别在于解决问题的思路,而不仅仅是代码的写法。

(来自chatGPT)

---------------------------------------------------------------------------------------------------------------------------------

看完这篇文章,你知道他们的区别了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值