C语言函数的递归调用

c语言函数的递归和调用~

你的理解太不对了吧?if(n==1)||(n==0) return 1中的return 1一定是返回到主函数吗?否。除了你输入1或0时它是返回主函数的,因为这时候是主函数调用它的;而当输入的n大于1时,n=1是的情况是n=2的时候由函数fac调用的,怎么不返回到调用它的函数fac当n=2时的现场而返回到与它毫无关系的主函数去了呢?要这样一级一级一直返回到n等于主函数调用时的值的时候才由return t返回到主函数。所以if(n==1)||(n==0) return 1就是专门为你输入1或0的特殊情况而设置的,当你输入的n大于1时无论fac被递归了多少次,当n递减到1时开始依次返回到fac函数n=2、n=3、n=4...直到n=n最后返回main函数……
递归是有点不好弄,你输入个小点的数,比如3,画个流程图,一下就理解了。注意一点是函数只返回到调用它的断点那里!

p=7-fun(5) ; fun(5)=5-fun(3) ; fun(3)=3-fun(1) ; fun(1)=3
从后往前带,输出结果是 2

先调用函数f,然后把返回值赋值给z。不过这个函数不对,没有退出条件,无法停止。举例说明吧
int f(int x)
{
if(x==0)
{
return 1;
}
else
{
return x*f(x-1);
}
}
假如f(3)
那么
第一次f(3):x!=0,调用f(2)
第二次f(2):x!=0,调用f(1)
第三次f(1):x!=0,调用f(0)
第四次f(1):x==0,返回1
返回第三次调用f(1):返回1*1=1;
返回第二次调用f(2):返回2*1=2;
返回第一次调用f(3):返回3*2=6;
f(3)的结果为6

方便你理解,你可以看这样一段程序。

#include<stdio.h>
int f(int x){
    printf("f(x=%d)
",x);
    if(x==0){
       return x;
       printf("return x=%d
",x);
    }       
    else{   
       int z=f(x-1); 
       printf("return z=%d
",x);
       return z;
   } 
}
int main()
{
  f(5);
}

输出

f(x=5)
f(x=4)
f(x=3)
f(x=2)
f(x=1)
f(x=0)
return z=1
return z=2
return z=3
return z=4
return z=5



先调用函数,再赋给z。
变量作用域{ }

是先调用函数F。

建议以调试模式运行程序,并以单步模式逐行执行,跟踪程序的运行轨迹,从而加速并加深对递归的理解。

你这个函数是个死的循环

c语言函数的递归调用
答:递归必须满足两个条件:1.初始条件;2.递归函数.举个例子,求阶乘:有f(1)=1;f(n)=n*f(n-1)(n≥2)现在你可以实现如下:long func(int n)//定义函数 { long f,s=0;if(n==1)f=1;else { f=func(n-1)*n; //这里就是一个递归的过程,自身调用自身 s=s+f;} ret...

什么是函数的递归调用?正确的函数递归条件是什么?并写一个简短的C语言...
答:递归就是函数自己调用自己的函数。其实递归函数的调用和其他一般函数调用没有什么区别,只是在形式上能够建立循环的逻辑调用。递归函数一定有个基本要求,就是肯定会满足某种条件,不再调用自身。(否则就无限递归,直到内存溢出)。例如,我们计算1到100的所有数相加。int addRecursion(int curTotle, int a...

C语言的函数调用是递归吗?
答:“递归”外在表现出来的形式,是:函数自己调用自己。也就是说:如果我们定义了一个函数fun(),那么,在fun函数体中,fun这个函数自己调用自身 ,这就是表示:递归调用。我们来看一下,下面这个程序段:上述C语言程序中,第7行到第10行,就是使用“循环”的方式,来实现从0一直累加到100的和。大部分...

c语言递归函数
答:一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。(引自谭浩强的C语言书里)用递归法计算n!可用下述公式表示:n!=1 (n=0,1)n×(n-1)! (...

请教C语言老师,详细解释一下递归调用:
答:首先, main()函数中的y=fac(3),引起第1次函数调用。进入函数后实参n=3,应执行计算3*fac(2)为了计算fac(2),引起对fac()函数的第2次调用(递归调用),重新进入函数fac(),实参n=2,应执行计算2*fac(1)。为了计算fac(1),引起对函数fac()的第3次调用(递归调用),重新进入函数,实参n=1...

讲一下c语言中递归函数的使用方法
答:1,递归的终止点,即递归函数的出口 2,不断的递归调用自身 3,递归函数主体内容,即递归函数需要做的事情 ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。具体例子如下:void fun(int n){ ...

函数嵌套调用和递归调用的区别是什么?
答:区别:函数的嵌套调用是指在一个C语言函数里面在执行另一个函数,这样通常称为函数的嵌套调用。而函数的递归调用,一般指的是这个C语言函数调用自己本身的函数也就是说调用函数的函数体是一样的,这样称为递归调用。

c语言函数的递归调用
答:比如说做了5次递归,即n=5;执行的操作如下:第1次调用(n=5) ,定义了一个intc;第2次调用(n=4) ,定义了一个intc;第3次调用(n=3) ,定义了一个intc;第4次调用(n=2) ,定义了一个intc;低5次调用(n=1) ,定义了一个intc;n=1时,满足了条件n==1,故此时c=10;第5次返回...

c语言中嵌套调用和递归调用的区别
答:一、作用不同:函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数 例:funca() { funcb(); } funcb() { funcc(); } funcc() {cout << "Hello" <<endl; }这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。递归调用是一种解决方案,在程序中,递归...

请问下c语言中函数的嵌套和递归怎么区别
答:在C/C++中,函数可以递归调用,也可以嵌套调用。递归调用是指自己调用自己,而嵌套调用是指两个或多个函数间相交叉互调用。递归调用时,函数自身必须更改返回(结束)条件,否则就会进入死循环,而嵌套调用就没有这样的要求,与普通函数一样,完成指定操作后正常返回即可。

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网