递归调用

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

#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);
}
C++

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,递归就终止了,会逐层退出。也就是递和归的意思

再次深入解析

递归调用

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

递归调用

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

C语言

作用域和声明周期

2024-11-14 12:48:55

C语言

可变参数的函数

2024-11-14 13:12:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

Powered by atecplugins.com