递归调用

一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。
递归必须是有推出条件的,如果没有,将会一直递下去,没有归。造成内存溢出崩溃。
先写一个简单的递归函数

#include<stdio.h>
#pragma warning (disable:4996)
long fact(int n)
{
	if (n == 1|| n==0)
	{
		return 1;
	}
	else
	{
		return n * fact(n - 1);
	}
}
int main()
{
	int input;
	printf("请输入一个正整数\n");
	scanf("%d", &input);
	int res = fact(input);
	printf("%d! = %d", input, res);
}

fact() 就是一个典型的递归函数。调用 fact() 后即进入函数体,只有当 n==0 或 n==1 时函数才会执行结束,否则就一直调用它自身。
我们写的函数是求阶乘,比如要求5的阶乘,5*4*3*2*1 要写递归有俩点1.列出两数关系公式
f = n*(n-1)
2.找出退出条件
n == 1或者 n==0退出
由于每次调用的实参为 n-1,即把 n-1 的值赋给形参 n,所以每次递归实参的值都减 1,直到最后 n-1 的值为 1 时再作递归调用,形参 n 的值也为1,递归就终止了,会逐层退出。也就是递和归的意思

再次深入解析

image.png

上图是函数递归的整个过程,下面再用内存的视图看一下递归函数

image.png

每一个函数都有自己的n,他们并不是一个n。
至此,我们已经对递归函数 factorial() 的进入和退出流程做了深入的讲解,把看似复杂的调用细节逐一呈献给大家,即使你是初学者,相信你也能解开谜团。
以上就是我对简单递归函数的总结

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/115/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 2024年11月14日 下午12:48
下一篇 2024年11月14日 下午1:12

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注