数据结构之递归的巨大缺陷

递归在解决如阶乘和斐波那契数列等问题时展现出简洁的结构,但其内在缺陷是内存开销巨大。由于每次递归调用会将函数相关数据压入栈,当栈内存超出限制时会导致溢出和程序崩溃。以递归求解斐波那契数为例,即使只是计算42的值,也会产生显著的运行时间延迟。因此,尽管递归思路直观,但在面对内存效率时,通常建议优先考虑迭代方法。
摘要由CSDN通过智能技术生成

数据结构之递归的巨大缺陷


递归是解决阶乘以及斐波那契额数等 一种很好的技巧,结构简单容易理解,但是其存在巨大的缺陷,就是内存的开销。


一、栈?

什么是栈,在内存当中它是专门用来给函数分配内存的,每次调用函数,都会将相关数据压入栈中,包括局部变量、局部数组、形参、寄存器、冗余数据等。
对每个线程来说,栈能使用的内存是有限的,如果程序使用栈内存超出最大值就会发生溢出,程序就会崩溃。

这里大家可以去了解一下c++程序运行时的内存结构,能帮助你写出更有效率的代码。

二、递归函数的调用

递归函数就是不断调用自身的过程,每次调用就会把当前的函数压入栈当中,如果调用自身的此时十分大,这时就会产生溢出,程序就会崩溃。

例子:递归求斐波那契数

#include <stdio.h>
#include <time.h>
using namespace std;
#include<bits/stdc++.h>

//递归计算斐波那契数
long recursion(int n) {
   
    if (n <= 2) <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值