我看到了这样的C代码:
#include <stdio.h>
void main ()
{
static int ivar = 5;
printf ("%d", ivar--);
if (ivar)
main ();
}
输出:
54321
我是C的新手,我想在条件失败之前,会一次又一次地调用main
方法。由于我是C的新手,在上述情况下多次调用main
函数是不错的做法?有没有真实世界的案例,这种代码非常有用?
提前致谢。
答案 0 :(得分:8)
在您的示例中,它无关紧要,因为它只是一小段代码。但在一般情况下,我认为调用main
是一个坏主意,原因如下:
main
。当你看到它时,你必须回溯并重读整个事物。此外,main
在某种意义上并不是一个有意义的名称,因为它不清楚递归的意图是什么。所以我会用另一个有意义的名字编写另一个函数来反映这一点。答案 1 :(得分:7)
我想说,调用main
函数很少(如果有的话)。如果您要进行递归,请创建一个函数来执行此操作。
答案 2 :(得分:6)
while循环更合适。当每次递归时,您正在进行不同的作业 - 通常是较小的作业时,递归是有意义的。
这段代码真正做的是展示函数本地静态变量:ivar
仅在main
的第一次调用中初始化。每次递归时,尽管有ivar=5
语句,它仍会递减。
main
具有特殊含义。通俗地说,它应初始化环境,然后调用其他一些驱动应用程序逻辑的函数。
优化编译器可能会将该代码转换为迭代版本。
答案 3 :(得分:3)
这种情况不常见(我之前从未见过它),非常令人困惑,因为main应该在程序启动时调用一次,在程序结束时调用,在大多数真实程序中基本上都是不切实际的,因为你需要停止对main()的后续调用再次解析命令行。
编写一个单独的递归函数并从main调用它并使用普通函数参数而不是静态变量更为合理。
答案 4 :(得分:1)
它被称为递归,它可能非常有用。例如遍历一棵树。一些数学计算也使用递归。