0
点赞
收藏
分享

微信扫一扫

【递归】栈 & 计算⒊的阶层


栈(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

📝拓展知识点如下👇

写代码的时候如何在什么情况下使用递归?

🍊说明⇢如果你的这个功能实现用递归非常容易的话、非常简单、代码量还少、理解起来容易、而且并不存在什么缺陷。那么这种情况你就可以使用递归了。但是,如果你用递归写起来是非常简单,但是还是有明显的缺陷。那么这里不推荐使用递归的方法,典型的例子[斐波那契数列]


举报

相关推荐

0 条评论