⑴ c语言函数的递归调用
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
⑵ 讲一下c语言中递归函数的使用方法
递归函数有三点要求:
1,递归的终止点,即递归函数的出口
2,不断的递归调用自身
3,递归函数主体内容,即递归函数需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。
具体例子如下:
voidfun(intn)
{
if(n<=0)return;//1这是递归的终点,即出口
fun(n-1);//2、递归函数自身的调用
cout<<n<<endl;//3递归函数的主体内容
}
2,3合并的情况
intfun(intn)
{
if(n<=0)return0;
returnfun(n-1)+fun(n-2);//23合并
}
⑶ 请教C语言老师,详细解释一下递归调用:
分析一下fac()是如何执行的。假设读入的n=3。
首先, 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,应执行计算1*fac(0)。
为了计算叫fac(0),引起对函数fac()的第4次调用(递归调用),重新进入函数,实参n=0,此时执行f=1和return(f),完成第4次调用,回送结果fac(0)=1,返回到第3次调用层。
计算执行f=1*fac(0)和return(f),完成第3次调用,回送结果fac(1)=1 返回到第2次调用层。
计算执行f=2*fac(1)和return(f)。完成第2次调用,回送结果fac(2)=2,返回到第1次调用层。
计算执行f=3*fac(2)和return(f).完成第1次调用,回送结果fac(3)=6,返回到土函数。
⑷ C语言递归调用
递归程序在于理解执行过程
实际执行过程
main()
{
if (6/2>0)
{
if (3/2>0)
{
printf("%d",1);
}
printf("%d",3);
}
printf("%d",6);
}
所以结果是 1 3 6
⑸ c语言的函数递归调用是怎么执行步骤的
这是数组a[10]
dis(a[i]);//初始为啊0,就是a[0],然后在函数内部调用dis(a[i+1]),就是a[1],然后递增到数组结束
dis(a[i])//i=0;
dis(a[i]+1)//i=0+1
dis(a[i]+1)//i=1,i+1=1+1=2.............
⑹ C语言函数的递归调用
我数学是很菜拉!不过这个可以这样理解 !
其实递归函数可以看成一个循环,
if (n==0)
return 0;
else if (n==1)
return 1;
这个是跳出函数的条件.
可以这样看,比如说:
#include <stdio.h>
void move(int x,int y)
{
printf("move top %d---->%d\n",x,y);
}
void hanoi(int n,int one,int two,int three)
{
if(1==n)
{
move(one,three);
}
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void main()
{
int s;
scanf("%d",&s);
hanoi(s,1,2,3);
}
经典的汉诺塔例子,简单的说就是函数调用自己
就是说::
fun(int n)
{
if(0==n)//条件就是当n=0的时候就可以退出这个函数, 记住,每个递归函数必须有一个跳出的条件.
.............
else
{
........
fun(n-1);这句必须有,就像循环里的for(i=0;i<10;i++)
功能和i++的功能一样前面的if就和i<10的功能一样!
fun(int n)
就和i=0的功能一样!其实也很好理解!前面的汉诺塔的例子你看看,很多语言介绍递归的时候都是用的这个例子!
女孩子学编程的不太多哦!呵呵!加油哦
}
}
⑺ c语言函数递归调用
我给你举个简单的例子你就明白了,你可以假设n=3
然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
满意请采纳
⑻ C语言的递归调用
int fun()。。。。。。。。。。。。。。。。1
{
……
fun(); 。。。。。。。。。。。。。。。2 // 递归调用,进入下一层,回到1
if(……) // 返回条件
return …… ;。。。。。。。。。。。。3 // 返回到上一层的2,继续往下执行
}
注意一定要有返回条件,否则只有递推,没有回溯,永远跳不出来,变成死循环。
⑼ C语言中递归调用的实例以及讲解。
下面演示一个斐波那契数列前N项和#include <stdio.h>
#define COL 10 //一行输出10个
long scan()
{ //输入求fibonacci函数的第N项
int n;
printf("Input the N = ");
scanf("%d",&n);
return n;
}
long fibonacci(int n)
{ //fibonacci函数的递归函数
if (0==n||1==n) { //fibonacci函数递归的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值
}
}
int main(void)
{
int i,n;
n = scan();
printf("Fibonacci数列的前%d项\n", n);
for (i=0; i<n;) //输出fibonacci函数前n项每项的值
{
printf("%-10ld",fibonacci(i++)); //调用递归函数并且打印出返回值
if(i%COL==0)
{ //若对COL取余等于0就换行,也就是控制每行输出多少个,
//而COL=10就是每行输出10个
printf("\n");
}
}
printf("\n");
return 0;
}