c语⾔fun函数递归,C语⾔之递归函数的设计与调⽤
递归函数c语言规则
函数是可以嵌套调⽤的,即在某⼀个函数中的语句可以是对另⼀个函数的调⽤,例如:
···
main()
{
float t;
int x,y;
t=fun1(x,y);
···
}
float fun1(int a,int b)
{
int z;
z=fun2(a+b,a-b);
···
}
int fun2(int m,int n)
{
···
}
···
fun1()和fun2()是两个独⽴的函数,在fun1的函数体内有包括了对fun2的调⽤。
在C语⾔中,除了函数的嵌套调⽤,还存在着另⼀种函数的调⽤形式:函数的递归调⽤。递归调⽤就是在函数中出现调⽤函数⾃⾝的语句,或者两个函数之间出现相互调⽤的情况,这种调⽤⽅式称为是递归调⽤,递归调⽤⼜分为直接递归调⽤和间接递归调⽤两种情况。
1. 直接递归调⽤
直接递归调⽤是指在函数定义的语句中,存在着调⽤函数本⾝的语句。
2. 间接递归调⽤
间接递归调⽤是指在不同的函数定义中,存在着相互调⽤函数语句的情况。
在C语⾔中,为了防⽌陷⼊⽆限的递归调⽤的状态,对于递归函数的设计是由严格的数学模型的,并不是所有的问题都可以设计成递归函数。
要想设计成递归函数在数学上必须具备以下两个特点:
1) 问题的后⼀部分与原始的问题类似。
2) 问题的后⼀部分是原始问题的简化。
这⾥要注意的是如果后⼀部分的问题出现的情况⽐原始问题复杂了,这时就不能再设计成递归函数了。
常见的就是求n阶乘或者是关于数列的、有规律变化的⼀些问题。例如:编写程序要求从键盘输⼊⼀个正整数n,计算n!。
分析:n!的数学模型是符合设计成递归函数的数学模型的。
#include
long fun(int n)
{
long result;
if (n == 0 || n == 1)
{
result = 1;
}
else
{
result = n * fun(n - 1);//直接递归调⽤
}
return result;
}
int main()
{
int n;
long z;
printf("请输⼊⼀个数据n:\n");
scanf_s("%d", &n);
z = fun(n);
printf("%d!=%ld", n, z);
}
好了!今天的讲解就到这⾥了,欢迎⼤家积极与我讨论。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。