为什么这不是递归的例子?

时间:2012-02-16 02:05:48

标签: recursion

所以,我看到了某个地方(我不知道我的头顶在哪里,但如果我记得它会发布一个链接),下面的代码不是递归的例子:

void f() {
    f();
}

现在,这是一个自我调用的函数(尽管是无限的)。为什么这不是递归的例子?它可能不是最好的例子,但为什么它们会说它根本不是递归呢?

4 个答案:

答案 0 :(得分:4)

这绝对是递归函数的一个例子,完全基于“递归”的定义。简单来说,递归函数就是任何一个自称的函数。

很难解释为什么有人说它不是没有在上下文中看到他们的主张(并且希望尝试为这个主张辩护)。

那就是说,它不是一个非常有用的递归函数,也许这就是他们所关注的重点。任何调用该函数的程序在溢出堆栈后最终都会崩溃。有时,这称为“堆栈溢出”错误。 : - )

有用的递归函数必须包含某种条件代码,导致递归最终停止。

答案 1 :(得分:1)

您的代码示例没有终止方法,并且会永远继续,可能导致堆栈溢出异常。递归函数有一种通过基本情况条件终止的简单方法。阅读this文章,了解正确的定义和解释。

答案 2 :(得分:1)

这绝对是递归,这里有威斯康星大学麦迪逊分校的一些笔记。实际上使用void f()作为示例http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html

该网站可能一直试图将如何不进行递归的方式带回家..不确定没有源链接。

答案 3 :(得分:1)

这是递归的例子,但没有办法结束它,你必须使用条件终止它。