这篇比较水,毕竟课上都学过。
为什么要用递归:
两个非常非常非常典型の示例:求阶乘和求斐波那契数列和
一、函数调用栈
在函数调用的时候,系统会创建一个函数调用栈,存储:
1.调用返回地址(把返回值返回到哪)
2.实参(副本)
3.该函数の局部变量
每进入一层递归,把本层递归调用所需的信息压入栈顶;
每退出一次递归,从栈顶弹出相应的信息。
从栈底到栈顶:
系统start->main()->func()。等一个函数彻底进行完,返回它的返回值后,该函数出栈。
二、求递归和求斐波那契数列
1.递归
问题规模会逐渐收敛,直到实参为1。
#include<cstdio>
// 1.递归求阶乘
int Factorial(int n)
{
if (n == 0 or n==1)
return 1;
else
return n * Factorial(n - 1);
}
2.斐波那契数列
// 2.递归求斐波那契数列
int Fibonacci(int n)
{
if(n==0)
return 0;
if (n == 1 or n == 2)
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}