【发布时间】:2021-09-01 21:53:01
【问题描述】:
查看这段代码,它以通常的方式将值传递给函数(按值,而不是通过引用/指针):
funky(x)
{
if (x > 0) {
x -= 1
funky(x)
}
printf("%d," x)
}
int tester()
{
funky(x passed in as 5)
return 0
}
显示的输出是什么?
int tester 是否作为顶部 x 的值传入,funky(x) -= 1 代码?如果是的话,那只会打印4吗?没有任何东西被声明为 int 或 string,所以我不确定会打印什么。
【问题讨论】:
-
你为什么不运行它看看结果是什么(在将它修复为真正的代码以便它真正编译之后)?
-
你编译成功了吗?我对此表示怀疑。如果您是编码新手,您应该首先通过以下教程积累一些经验,直到您可以自己创建简单的类似 HelloWorl 的程序。然后您可以发现显示的代码中会触发错误的部分、缺少的
;s 以及其中一个函数调用的()内的注释。然后,只有那时,而不是更早,你应该阅读“递归”。这绝对不是您似乎处于的初学者级别的主题。 -
一个可以帮助您了解递归函数的简短答案是Recursion flow in c language and how the output is printed 理解该函数的最佳方法是拿出一张 8.5x11 的纸并跟踪递归调用时的变量值制成。只需写出函数调用发生的情况,然后是递归调用 1、递归调用 2 等。记住,最后,当递归开始 Unwind 时,控制返回到递归调用的点制作完成。
-
如果你想讨论一段代码的输出,请提供它的minimal reproducible example 并显示你得到的输出,然后讨论它并询问你没有得到的部分。讨论非编译代码行为是不可能的。和“请预测这段代码的行为”。即使代码可以运行也不是 StackOverflow 问题。
-
我想知道语法错误是否是测验网站上错误代码的指标,或者是故意防御人们只是将代码复制到某处以获得输出而不考虑......