深入理解递归函数的调用过程

上面是个在四周递归调用复杂只是很能阐明成绩的状况:

递归事例
#include
void up_and_down(int);
int 主(空)
{
up_and_down(1);
return 0;
}
void up_and_down(int n)
{
PrPtf(一级 %d:n location %p/n”,n,&n); /* 1 */
设想(n)<4)
up_and_down(n+1);
PrPtf(一级 %d:n location %p/n”,n,&n); /* 2 */
}

输出卒
Level 1:n location 0240FF48
Level 2:n location 0240FF28
Level 3:n location 0240FF08
Level 4:n location 0240FEE8
Level 4:n location 0240FEE8
Level 3:n location 0240FF08
Level 2:n location 0240FF28
Level 1:n location 0240FF48

 率先,main()运用决定因素1调用重大聚会up_and_down(),合乎逻辑的推论是up_and_down()躺正中的形状决定因素n涵义是1,SO印记声明#1输出了一级
那时的,鉴于
n值不足4,因而up_and_down()(第1运用决定因素n+1就是说,数值2调用了up_and_down()(2).使得n在第2
在特质调用中分派2,印记声明#1输出是二级。相似地它,以下两个调用辨别是非印记浮现Level3四级


当它开端给予时
4会话时间,n涵义是4,因而if声明的资格不满。此刻不再呼叫up_and_down()重大聚会。第4级呼叫衔接
给予印记声明
#2,即输出四级,由于n涵义是4。如今必要给予重大聚会return声明,此刻第4会话完毕,将限制汇成到
重大聚会的调用重大聚会,这是最早
3程度调用重大聚会。第3程度调用重大聚会中前任何人给予过的声明是在if在句子中4特质调用。因而,它继
持续给予其接替的人或事物法典,就是说,给予印记声明
#2,这将是输出Level3作为最前面的3会话完毕后,第2程度调用重大聚会开端持续给予,即输出
二级类比倒地。

 当心,每个特质递归运用它本人的公有变量。n你可以瞥见地址的涵义来使宣誓它。

递归的重要的:

1每个重大聚会调用都有任何人汇成。当次流出给予时,它将被转变到优于的递归持续。

2递归重大聚会,躺递归调用前的声明和各级被调重大聚会具有等于的次.如印记声明#1躺递归调用声明前,其次是送货。
调用调用的次被给予。
4次.

每个特质的3个重大聚会调用都有本人的公有变量。

4递归重大聚会,躺递归调用声明后的声明的给予次和个别地被调用重大聚会的次相反.

5不管每个特质递归都有它本人的变量,只是重大聚会法典不繁殖。

6 递归重大聚会中麝香牵制可以止付递归调用的声明.

看任何人倘若递归重大聚会调用的状况:二元系形状的输出积分

输出积分,输出二元系形状
#include
void to_binary(unsigned long n);

int 主(空)
{
unsigned long number;
输出 an 积分(q) to 脱扣):
(SnF)(%UL),数)=1
{
二元系 equivalent :”);
to_binary(number);
putchar(”/n”);
输出 an 积分(q) to 脱扣):
}
printf(“Done./n”);
return 0;
}
void to_binary(unsigned long n)    /*递归重大聚会*/
{
int r;
r=n%2;    /*在递归调用垄断计算n%2的数值,那时的在递归调用声明以前停止输出.如此
计算的第任何人值是在最不可能的任何人输出上。
设想(n)>=2)
to_binary(n/2);
Putchar(′0 R);/*若R为0,词句'0' r是0字母。;设想R是1,那时的词句的值为
‘1’。当心字母1的数字编码大于数字。
ASCII和EBCDIC的两个法典愿意的这一资格。
return;
}

输出卒为:Enter an 积分(q) to 脱扣)
9
Binary equivalent :1001
Enter an 积分(q) to 脱扣)
255
Binary equivalent :11111111
Enter an 积分(q) to 脱扣) 

发表评论

电子邮件地址不会被公开。 必填项已用*标注