当前位置:知识百答>生活百科>递归函数怎么执行

递归函数怎么执行

2023-08-05 00:54:57 编辑:join 浏览量:560

递归函数怎么执行

我给你简单写了一个经典的递归函数(求阶乘)

#include

int fun(int n)

{

printf("test...\n");//先帮助你理解递归的基本过程

if(n==0)

return 1;

else

return n*fun(n-1);

}

void main()

{

int n;

printf("输入一个整数: ");

scanf("%d",&n);

printf("result=%d\n",fun(n));

}

当一个问题具有如下特征时,可用递归求解:

1.大问题能分解成若干个子问题;

2.子问题或者是一个定值或者是与大问题具有相同性质的问题;

3.子问题在最小尺度上有直接解,即过程能朝着问题结束的方向发展(递归结束条件);

首先,递归是通过栈实现的,若没有遇到结束条件,入栈保存本次调用的返回地址,局部变量,形式参数等值。

比如计算上面的fun(3)过程:

执行时遇到fun(2),保存当前的n(n=3)以及fun(2)执行完后的返回地址;然后继续执行,继续对局部变量和函数返回地址入栈保存。直到遇到递归结束条件,开始弹栈,这是将栈顶n域值恢复给n,栈顶地址域作为返回地址出栈,继续这样下去,直到栈空,最终所得的n就是所要求得值。

不知道这样的描述你能不能懂。总之,利用栈的先进先出特性,先往下递推,遇到结束条件后回溯(弹栈求结果,最后返回),对于地址的相关问题,如果你学汇编语言就会懂了。。。

你可以画栈的图理解求阶乘的过程,对递归的理解绝对有帮助。希望对你有用。。。

标签:递归函数,执行

版权声明:文章由 知识百答 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.zhshbaida.com/life/201693.html
热门文章