本文主要是介绍栈(3)--栈与递归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:递归的实现:
1. 当在一个函数的运行期间调用另一个函数时,在运行该被调用函数之前,需先完成三项任务:
1).将所有的实参、返回地址等信息传递给被调用函数保存;
2).为被调用函数的局部变量分配存储区;
3).将控制转移到被调用函数的入口。
从被调用函数返回调用函数之前,应该完成下列三项任务:
1). 保存被调函数的计算结果;
2).释放被调函数的数据区;
3). 依照被调函数保存的返回地址将控制转移到调用函数。
2.递归函数执行的过程可视为同一函数进行嵌套调用,例如:
递归工作栈:递归过程执行过程中占用的数据区。
递归工作记录:每一层的递归参数合成一个记录。
当前活动记录:栈顶记录指示当前层的执行情况。
当前环境指针:递归工作栈的栈顶指针
二.举例说明;
递归算法求解正整数n的阶乘(n!)
long f (int n) {if (n = = 0) //递归结束条件return 1;else return n * f(n – 1);//递归调用}
模拟 f(4)调用的系统栈的变化状态
然后返回:
这篇关于栈(3)--栈与递归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!