概述
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("成功了!");
}
缺点:
效率低,太多层递归可能会导致栈溢出,可能会包含很多重复计算
最后
以上就是听话飞鸟为你收集整理的栈的应用——递归的全部内容,希望文章能够帮你解决栈的应用——递归所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复