为了方便看,我们先都求5的阶乘
#include <iostream>
using namespace std;
int n=5;
int main(){
int sum=1;
for(int i=1;i<=n;i++)
{
sum*=i;
}
cout<<sum<<endl;
return 0;
}
递归要有出口(基线条件/退出条件),递归主体(调用自己的代码)
#include <iostream>
using namespace std;
int n=5;
int fun(int n){
if(n==0||n==1){return 1;}//递归出口
return n*fun(n-1);//递归主体
}
int main(){
cout<<fun (5);
return 0;
}
``
原理
递归在内存里使用栈空间
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d947152742e84dbd8990078555c003f2.png)最先调用的在栈的最底层
所以递归的时间复杂度整不好很高,会把内存占爆
而且通过这个手算递归的过程也可以看出这递归时间复杂度也很慢啊,
还不如循环
[附上一个递归的时间复杂度的分析,取决于不同的问题规模啊](https://zhuanlan.zhihu.com/p/357693438?utm_id=0)