【发布时间】:2018-08-13 17:46:40
【问题描述】:
我试图了解递归是如何工作的,但还有一件事我不太明白:当递归函数本身内的递归调用之后有代码时,递归函数是如何工作的.请参阅下面的示例伪代码以帮助了解我的意思。 我的确切问题是递归调用之后的代码将以什么顺序(意味着何时)执行。 机器会注意递归调用,在调用之后执行剩余的代码位(打印“完成”),然后返回并实际执行整个递归调用,或者机器将在到达该行时立即执行递归调用,并且仅在该递归底部之后执行最后一段代码(打印“完成”) out? 什么时候“完成”会被打印多少次?
void recurse()
{
print "hello world";
for i = 0 up to 2
recurse();
print "done";
}
【问题讨论】:
-
当有递归调用时,编译器等不会对代码执行顺序的正常规则做出任何异常。事情的运行顺序与
recurse()完全是其他函数一样。 -
那么这意味着什么时候和多少次“完成”将被打印?请帮助我理解这一点!我是递归新手!
-
由于本例中的递归是无限的,因此“完成”never 被打印出来。 (可能不是你想要的。)
-
@usercow 您是否尝试过使用任何语言?您的函数没有终止条件,这意味着它永远不会停止。对
recurse()的每次调用都会再调用两次,因此它打印"hello world"的次数将呈指数增长,理论上是无限的。实际上,它最终会在"done"出现之前耗尽堆栈空间并崩溃。
标签: recursion