void main(){
int a,b,c;
func1(a,b);
c=a+b;
}
void func1(int a, int b){
int x;
func2(x);
x=x+100;
}
void func2(int x){
int m,n;
}
1.函数调用的特点:最后调用的函数是最先执行结束的(LIFO)
2.函数调用时,需要用一个栈来存储:
调用返回地址、实参、局部变量
main函数一层一层压下去
3.适合递归解决的问题:
可以把原始问题转化为属性相同,但规模较小的问题。
递归算法要注意递归表达式和边界条件(递归出口)
eg:递归算法求阶乘
#include <stdio.h>
int factorial (int n){
if(n==0 || n==1)
return 1;
else
return n*factorial(n-1);
}
int main(){
int x =factorial(10);
printf("成功了");
}
递归调用时,函数调用栈可称为“递归工作栈”
每进入一层递归,就将递归调用所需信息压入栈顶
没退出一层递归,就从栈顶弹出信息
//递归算法求斐波那契数列
#include <stdio.h>
int Fib(int n){
if(n==0)
return 0;
else if(n==1)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
int main(){
int x =Fib(4);
printf("成功了!");
}
缺点:
效率低,太多层递归可能会导致栈溢出,可能会包含很多重复计算