递归调用

递归调用

一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。

递归必须是有推出条件的,如果没有,将会一直递下去,没有归。造成内存溢出崩溃。

先写一个简单的递归函数

代码语言:javascript复制#include

#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() 的进入和退出流程做了深入的讲解,把看似复杂的调用细节逐一呈献给大家,即使你是初学者,相信你也能解开谜团。

以上就是我对简单递归函数的总结

相关推荐