一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。
递归必须是有推出条件的,如果没有,将会一直递下去,没有归。造成内存溢出崩溃。
先写一个简单的递归函数
#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,递归就终止了,会逐层退出。也就是递和归的意思
再次深入解析
上图是函数递归的整个过程,下面再用内存的视图看一下递归函数
每一个函数都有自己的n,他们并不是一个n。
至此,我们已经对递归函数 factorial() 的进入和退出流程做了深入的讲解,把看似复杂的调用细节逐一呈献给大家,即使你是初学者,相信你也能解开谜团。
以上就是我对简单递归函数的总结
网站标题:CV鼻祖洋芋
原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/115/
本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!