#结构#在本篇文章中,作者将与大家一起来了解栈在函数调用和递归中的应用以及其原理。
在之前的文章中,我们已经了解了栈——一种后进先出(LIFO)的线性表。那么栈和函数的递归调用有什么关系呢?
01函数调用
其实,当函数在调用的时候,最后被调用的函数总是最先执行结束。所以在我们的几乎任何一个程序调用之前,系统都会开辟一个函数调用栈去保存函数在调用中所需要的一些信息。
当我们在运行程序时,计算机会把目前正在执行代码的下一行代码的存储地址以及相关参数存入栈中。这样当我们恰好执行一个函数时,当我们执行结束该行的整个函数,就可以通过栈中的存储内容找到下一行我们需要执行的代码。
02递归
在递归中,栈的应用也是类似的,当我们的代码执行到递归函数时,计算机会先将该行的信息压入栈中,然后去执行递归函数,当递归函数执行完成后,在从栈中之前记录的找到需要执行的代码行继续执行代码。
接下来我们就来看一个简单的递归例子:
#includestdio.h
ints(intn){
if(n==){
return2;
}else{
returns(n+1)*n;
}
}
intmain(){
intx=s(10);
}
本篇文章到此就结束了,欢迎大家