c语言中函数的递归调用 c语言函数的递归调用怎么理解-古蔺大橙子建站
RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
c语言中函数的递归调用 c语言函数的递归调用怎么理解

C语言函数递归调用问题?

函数其实没有释放内存的概念,因为函数都是在指令区,而不是通常所说的释放内存对应的数据区,不过在整个程序执行完之后指令区也是要释放的。

目前创新互联已为上千的企业提供了网站建设、域名、虚拟空间、绵阳服务器托管、企业网站设计、长宁网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

函数调用的大概过程如下:

1,将调用函数的上下文入栈;

2,调用被调用函数;

3,被调换函数执行;

4,调用函数上下文出栈,继续执行后继指令。

所以在函数调用过程中原调用函数是不会退出的-----即你所说的释放内存。

具体到你给的代码:

首先main中调用test,

进入test后要求读入一个char,

你输入'1'后执行case

'1'中语句,所以输出“已调用”,然后就执行test()语句,即递归调用,此时main调用的test要等新的test执行完毕才能继续执行后继的i++语句;

再次进入test之后与从main中进入时一样,如果输入的是'1'会接着递归调用test,由于你输入了5次1,所以会继续调用5次test;

在最后一个test中你输入了ESC?

所以不再走case

'1'而走default了,所以输出"222222";

switch执行完之后判断c==27满足,所以while循环退出,继续执行printf语句,由于之前的test统统没有执行过case

1里的i++语句,所以全局变量i还是0;输出i=0;

到此最后一次test执行完毕;

倒数第二次的test继续执行i++,

所以i=2了,case

1执行完毕,但由于没有写break语句,所以继续执行default

语句,输出"222222",

退出switch语句,判断c==27,

由于c是全局变量,且最后一次输入的刚好是ESC,

所以判断满足,

退出while循环,输出i=1,

到此倒数第二次test执行完毕;

与倒数第二次类似的继续执行倒数第三、倒数第四、倒数第五和最终的第一次test后继代码,也就输出如你列出的结果了。

C语言函数递归调用?

第一级递归:n=483,i=n/10=48≠0

注意此时先递归调用convert(48),待递归返回再输出当前n的个位数字n%10=3

第二级递归:n=48,i=n/10=4≠0

此时继续递归调用convert(4),待递归返回再输出当前n的个位数字n%10=8

第三级递归:n=4,i=n/10=0

此时递归终止,先输出当前n的个位数字n%10=4

再返回上一级递归输出8,最后返回第一级递归输出3

因此最终输出为:4 8 3

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语言 函数递归调用是怎么回事?

一般来说是自己调用自己,一般有两个分支,一个分支是调用自己,还有一个分支是结束条件

如求n!

int

f(int

n)

{

if(n==1)

//这个是结束条件

return

1;

else

//这个是调用自己的分支

return

n*f(n-1);

}

还有一个比较复杂一点,是双向调用,也就是a函数调用b函数,b函数在调用a函数

这样循环调用,其实基于这个道理,还有多个函数互相调用,不过这样的情况很少见

但万变不离其宗,每个函数都有两个分支,一个是结束条件,一个是调用函数

C语言函数的递归调用

先调用函数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

c语言函数的递归调用?

递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。

然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。

fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!


分享文章:c语言中函数的递归调用 c语言函数的递归调用怎么理解
文章URL:http://scgulin.cn/article/dooopoe.html