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

在这里有任一递归召集的事例,复杂但很有开导。:

递归生动的例子
#include
void up_and_down(int);
int 首要(void)
{
up_and_down(1);
return 0;
}
void up_and_down(int n)
{
printf(程度 %d:n location %p/n”,n,&n); /* 1 */
最末(n)<4)
up_and_down(n+1);
printf(程度 %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 递归函数中,递归召集后结算单的表现次与TH相反。

5侮辱每个荣誉递归有它本身的变量,只是函数指定遗传密码不繁殖。

6 递归函数中一定遏制可以音管递归召集的结算单.

再看任一详细的递归函数召集的事例:二元系整队的输出积分的

输出积分的,输出二元系整队
#include
void to_binary(unsigned long n);

int 首要(void)
{
unsigned long number;
printf(请输出 an 积分的(q) to 放弃做):
(SnF)(%UL),数)=1
{
二元系 equivalent :”);
to_binary(number);
putchar(”/n”);
printf(请输出 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'is大于数值的数字编码
ASCII和EBCDIC的两个指定遗传密码使满足这一资格。
return;
}

输出最末为:Enter an 积分的(q) to 放弃做)
9
Binary equivalent :1001
Enter an 积分的(q) to 放弃做)
255
Binary equivalent :11111111
Enter an 积分的(q) to 放弃做) 

发表评论

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