Recursion 递归函数是高阶函数的特例吗

Recursion 递归函数是高阶函数的特例吗,recursion,computer-science,higher-order-functions,Recursion,Computer Science,Higher Order Functions,维基百科说: 在数学和计算机科学中,高阶函数 函数形式(functional form,functional或functor)是在 至少满足以下条件之一: 将一个或多个函数作为输入 输出一个函数 而且 递归函数是在其运行期间调用自身的函数 执行 这是否意味着递归函数可以归类为高阶函数的一个非常特殊的情况 请参考本案例: int foo(int i) { if(i>10) { return 10; } cout<<i; r

维基百科说:

在数学和计算机科学中,高阶函数 函数形式(functional form,functional或functor)是在 至少满足以下条件之一:

  • 将一个或多个函数作为输入
  • 输出一个函数
而且

递归函数是在其运行期间调用自身的函数 执行

这是否意味着递归函数可以归类为高阶函数的一个非常特殊的情况

请参考本案例:

int foo(int i)
{
    if(i>10)
    {
       return 10;
    }
    cout<<i;
    return foo(++i);
}
intfoo(inti)
{
如果(i>10)
{
返回10;
}
coutNo在此上下文中,“输出”函数意味着返回函数,而不是返回调用函数的结果。也就是说,返回值本身是可调用的。递归函数通常不一定会这样做。例如:

def factorial(n: int) -> int:
    if n == 0:
        return 1
    else:
        return n*factorial(n-1)
此代码返回整数。不能调用整数,因此它不是高阶函数。

输出函数意味着函数可以用作函数的返回值,如下所示(Lua中的代码):

函数foo()
返回函数(a,b)返回a+b结束
结束

在您的递归函数示例中,返回值是expresion
foo(++i)
的结果,而不是函数
foo
本身。

假设您的Algol方言不支持递归,但支持高阶函数。我们仍然可以实现您的示例吗?当然可以

intfoo_aux(inti,Func cont)
{
如果(i>10){
返回10;
}否则{

我们还可以从哪些分类中选择?您在编辑中引用的函数不是“高阶函数”。它将递归调用产生的值返回到自身,而不是返回函数。共享和享受。您能将lua代码转换为c/c++/java/js吗。我无法理解一个语句中的一两个返回用法。我使用lua是因为它支持高阶函数,即使您不知道它也很容易理解。key表示函数(a,b)返回a+b end
表示函数定义的语法。