gpt4 book ai didi

c - 不明白这个递归函数

转载 作者:行者123 更新时间:2023-11-30 14:57:21 26 4
gpt4 key购买 nike

这是我读过的一本书中的递归函数,因为它不是一个循环,这个函数打印那些更像是循环的输出。我试图理解这个函数 up_and_down 是如何工作的。

在书中我读到它说递归函数调用它自己,但在代码中我无法直接看到它如何?

有人可以一步步解释一下函数中发生的事情吗?提前致谢。

#include<stdio.h>

void up_and_down(int);
int main(void){
up_and_down(1);
return 0;

}
void up_and_down(int n){

printf("Level %d: n location %p\n" , n , &n);
if(n < 4){

up_and_down(n+1);
}
printf("LEVEL %d: n location %p\n",n,&n);
}

输出

Level 1: n location 0x7ffd8988c9fc

Level 2: n location 0x7ffd8988c9dc

Level 3: n location 0x7ffd8988c9bc

Level 4: n location 0x7ffd8988c99c

LEVEL 4: n location 0x7ffd8988c99c

LEVEL 3: n location 0x7ffd8988c9bc

LEVEL 2: n location 0x7ffd8988c9dc

LEVEL 1: n location 0x7ffd8988c9fc

最佳答案

每次调用递归函数时,都会创建一个新的上下文,并堆积在最后一个上下文之上。该上下文存储在堆栈中。

第一次输入 up_and_down() 时(即:up_and_down(1)),您将获得以下上下文:

-----------
| LEVEL 1 |
-----------

上面的矩形代表调用 up_and_down(1) 内部的上下文。

第二次递归调用此函数(即: up_and_down(2) ),上下文为:

-----------
| LEVEL 2 |
-----------
-----------
| LEVEL 1 |
-----------

对于第三次调用(即:up_and_down(3)):

-----------
| LEVEL 3 |
-----------
-----------
| LEVEL 2 |
-----------
-----------
| LEVEL 1 |
-----------

依此类推,直到n等于4(即:up_and_down(4)):

-----------
| LEVEL 4 |
-----------
-----------
| LEVEL 3 |
-----------
-----------
| LEVEL 2 |
-----------
-----------
| LEVEL 1 |
-----------

n 等于 4 时,函数 up_and_down() 中的 if 语句首次计算为 false 。因此,它不会发生任何额外的递归调用(即:调用 up_and_down(5) 永远不会发生)。因此,n == 4 被认为是此递归函数的退出条件

执行流程继续执行第二个 printf()(即:显示 LEVEL 4)。然后第四次调用的上下文就被销毁了:

-----------
| LEVEL 3 |
-----------
-----------
| LEVEL 2 |
-----------
-----------
| LEVEL 1 |
-----------

控制流是从调用 up_and_down(4) 返回的控制流,即在递归函数中,其上下文由调用 up_and_down(3) 创建(即:这次显示LEVEL 3)。

以下所有步骤均类似地发生。

关于c - 不明白这个递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com