gpt4 book ai didi

c - 第二个 printf ("%d\n", n);被叫?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:35 25 4
gpt4 key购买 nike

// both() reads integers and prints the numbers in their original order
// and then in reverse order.
// effects: reads input, produces output
void both(void) {
int n = read_int();

if(n != READ_INT_FAIL) {
printf("%d\n", n);
both();
printf("%d\n", n);
}
}

int main(void) {
both();
}

所以这段代码读取整数并按原始顺序和相反顺序打印数字。 read_int() 是我的老师实现输入的一种方式。无论如何,假设输入是 1、2、3、4、5。预期输出是 1、2、3、4、5、5、4、3、2、1(显​​然它是换行符而不是逗号,但我不想浪费垂直空间)。

所以我的问题是,这是如何运作的?

从我脑海中可以追踪到的,both() 被 main 调用,并且在第二个 printf() 可以被访问之前它一直被调用,直到整个代码结束,因为当输入无效值(只是 5 之后的任何随机字母)时,两者都不会被调用。

这是如何工作的?

最佳答案

当递归停止时,程序并没有结束。执行将在内部 both 调用之后继续。所以这是一个快速的程序:

read_int = 1, print 1, call both() -> 1st recursion
read_int = 2, print 2, call both() -> 2nd recursion
read_int = 3, print 3, call both() -> 3rd recursion
read_int = 4, print 4, call both() -> 4th recursion
read_int = 5, print 5, call both() -> 5th recursion

read_int = 6, somehow the condition is true and the program continue at 5th recursion after the both() and print 5 again, so

5th recursion, print 5(second printf), end
4th recursion, print 4(second printf), end
3rd recursion, print 3(second printf), end
2nd recursion, print 2(second printf), end
1st recursion, print 1(second printf), end

希望这有助于代码的逻辑和执行。

关于c - 第二个 printf ("%d\n", n);被叫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54977917/

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