c ++中的递归和内联函数

时间:2010-05-09 10:47:35

标签: c++

有人能告诉我内联函数和递归函数之间的主要区别吗?

3 个答案:

答案 0 :(得分:11)

这些是无关的概念。

函数可以内联声明,它向编译器发出信号,表示对函数的任何调用应该直接在调用时由函数的实现替换。它模糊地将某些逻辑实现为宏,但它保留了正常函数调用的干净语义。

递归函数只是一个自称的函数。

请注意,内联关键字只是一个建议。编译器可以随时忽略它。

另请注意,递归也可以内联声明。原则上,编译器可以通过将递归函数转换为调用函数内的迭代算法来内联递归函数。但是,递归通常会使编译器放弃内联。

答案 1 :(得分:2)

这是两个非常不同的概念。 99%的编程语言允许递归函数。递归函数重新调用它自己来完成某些事情。大多数递归函数都可以重写为循环 例如。简单的递归函数。

int Factorial(int f)
{
   if(f > 1)
       return f * Factorial(f-1);
   else
       return 1;
}

内联函数是编译器的一个提示,您不希望处理器跳转到此函数,而只是包含函数的操作码,无论它在何处使用。这为一些架构的某些调用构建了更快的代码。 请注意,针对非嵌入式处理器的大多数现代编译器都会选择忽略您的“内联”提示,并会选择内嵌的内容。

希望这会有所帮助,如果格式错误,请在我的I-phone上输入。

答案 2 :(得分:1)

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

内联函数是一个函数,即“插入另一个函数”,即如果你有一个内联函数add(a,b),并且你从函数func调用它,编译器就可以了将add的函数体集成到func的主体中,这样就不需要将参数压入堆栈。