递归是解决阶乘以及斐波那契额数等 一种很好的技巧,结构简单容易理解,但是其存在巨大的缺陷,就是内存的开销。
一、栈?
什么是栈,在内存当中它是专门用来给函数分配内存的,每次调用函数,都会将相关数据压入栈中,包括局部变量、局部数组、形参、寄存器、冗余数据等。
对每个线程来说,栈能使用的内存是有限的,如果程序使用栈内存超出最大值就会发生溢出,程序就会崩溃。
这里大家可以去了解一下c++程序运行时的内存结构,能帮助你写出更有效率的代码。
二、递归函数的调用
递归函数就是不断调用自身的过程,每次调用就会把当前的函数压入栈当中,如果调用自身的此时十分大,这时就会产生溢出,程序就会崩溃。
例子:递归求斐波那契数
#include <stdio.h>
#include <time.h>
using namespace std;
#include<bits/stdc++.h>
//递归计算斐波那契数
long recursion(int n) {
if (n <= 2) <