栈(stack)
在执行函数的时候,函数内部局部变量的存储单元都是可以在栈上进行创建的,函数执行结束的时候这些存储单元会被自动的进行释放。栈区主要存放运行函数所分配的局部变量,函数的参数,返回数据,返回地址等。
提醒→递归是必须要存在着限制条件的,不然堆栈当中就会产生栈溢出。在程序运行的时候,调用函数是有代价的,那就是需要占用一片叫做栈(stack)的内存空间。当调用函数的时候,都必须要存放到一些数据到栈里面去。
当函数运行结束的时候这些数据会从栈里面被取出,当函数运行结束的时候这些数据会从栈里面被取出。那么我们知道如果调用了很多函数但是这些函数都不会被返回的,那么栈就会被塞满了,数据就没有地方存放了,这种情况就叫做栈溢出的错误。对于程序员来说这是一共非常致命的问题,因此程序会被操作系统强行终止的。
『递归』⇢ 计算⒊的阶层
示例代码如下↓
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int f(x)
{
if (x <= 1)
return 1;
//return x;
else
return x * f(x - 1);
}
int main(void)
{
int sum = f(3);
printf("sum = %d\n", sum);
return 0;
}
运行结果🖊
sum = 6
🍏代码解析⇢是不是发现和上述计算1加到100结果和这道题目是做法非常类似的,只不过改变了调用的运算符,以及限制条件。
f(3) = 3 * f(2) = 3 * 2 * (1) = 3 * 2 * 1 = 6 || 1 * 2 * 3 = 6
📝拓展知识点如下👇
写代码的时候如何在什么情况下使用递归?
🍊说明⇢如果你的这个功能实现用递归非常容易的话、非常简单、代码量还少、理解起来容易、而且并不存在什么缺陷。那么这种情况你就可以使用递归了。但是,如果你用递归写起来是非常简单,但是还是有明显的缺陷。那么这里不推荐使用递归的方法,典型的例子[斐波那契数列]