循环函数和递归函数有什么区别?

时间:2015-01-28 21:07:56

标签: recursion language-agnostic functional-programming

我想简要介绍循环函数和递归函数之间的区别,并举例说明。

例如,让我们假设我们有3个函数A B和C.我知道如果函数A调用相同的函数,则称为递归。如果A调用B,然后B调用C,然后C调用A?

任何人都可以澄清这个吗?

4 个答案:

答案 0 :(得分:3)

递归函数是一个自我调用的函数。

它可以直接呼叫自己(A呼叫A),也可以间接呼叫(A呼叫B,B呼叫C,C呼叫A)。它还是一个递归。

答案 1 :(得分:2)

它被称为间接递归。

void foo(void)
{
    bar();
}

void bar(void)
{
    foo();
}

在C标准中(强调我的):

  

(C99,6.5.2.2p11)"应允许递归函数调用,直接和间接通过任何其他函数链。"

没有退出条件(就像在我的例子中),你可能最终陷入堆栈溢出(每次调用都会无限地添加堆栈帧,直到堆栈已满)。

答案 2 :(得分:1)

通常,此差异称为 direct 间接递归之间的差异。一个调用自身的函数显然是递归的,但即使是一个最终调用自身的函数循环也是递归的!

我们将前一种情况称为直接递归,后一种情况称为间接递归

直接递归

void foo() {
    foo();
}

间接递归

void foo() {
    bar();
}

void bar() {
    foo();
}

答案 3 :(得分:0)

循环(直接递归)函数是一个调用自身的函数,如下所示:

void primary(){
    primary();
}

您在第二个示例中指出的间接递归函数是调用其他函数的函数,第二个函数再次调用第一个函数,...,如下所示:

void primary(){
    secondary();
}

void secondary(){
    primary();
}