我想简要介绍循环函数和递归函数之间的区别,并举例说明。
例如,让我们假设我们有3个函数A B和C.我知道如果函数A调用相同的函数,则称为递归。如果A调用B,然后B调用C,然后C调用A?
任何人都可以澄清这个吗?
答案 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();
}