C++ 迭代到递归

C++ 迭代到递归,c++,c,algorithm,recursion,iteration,C++,C,Algorithm,Recursion,Iteration,可能重复: 是否总是可以将迭代函数转换为递归函数?取决于函数的功能 当然,您可以在函数中添加以下内容: void f(...) { if(false) f(...) else { processing } } 在这种情况下,第二个函数是递归的,但递归永远不会发生。取决于函数的功能 当然,您可以在函数中添加以下内容: void f(...) { if(false) f(...) else { processing } } 在这种情况下,第二个函数是递归的,但递

可能重复:


是否总是可以将迭代函数转换为递归函数?

取决于函数的功能

当然,您可以在函数中添加以下内容:

void f(...) {
    if(false) f(...)
    else { processing }
}

在这种情况下,第二个函数是递归的,但递归永远不会发生。

取决于函数的功能

当然,您可以在函数中添加以下内容:

void f(...) {
    if(false) f(...)
    else { processing }
}

在这种情况下,第二个函数是递归的,但递归从未发生。

据我所知,是的,这是可能的。另一种方法也是可能的,但在这种情况下,您可能需要使用适当的数据结构,如堆栈。

据我所知,是的,这是可能的。另一种方法也是可能的,但在这种情况下,您可能需要使用适当的数据结构,例如堆栈。

算法和算法的实现是两件不同的事情。术语递归也有不同的含义,这取决于它是应用于算法本身还是应用于它的具体实现。你的问题不清楚你在说哪一个

>将“递归”和“迭代”转换成程序语言(如C++或C++)中的一个程序的句法属性。 通常不可能将递归算法转化为迭代算法,其中“递归”和“迭代”描述了算法本身的基本结构。

算法和算法的实现是两件不同的事情。术语递归也有不同的含义,这取决于它是应用于算法本身还是应用于它的具体实现。你的问题不清楚你在说哪一个

>将“递归”和“迭代”转换成程序语言(如C++或C++)中的一个程序的句法属性。 通常不可能将递归算法转化为迭代算法,其中“递归”和“迭代”描述了算法本身的基本结构。

是的 所有迭代函数都可以递归,反之亦然。在函数式语言中,通常将迭代循环重写为尾部递归。只要函数语言是图灵完备的,并且它们都是,那么它就可以计算任何可计算的函数。因此,任何循环都可以迭代表示。

Yes
所有迭代函数都可以递归,反之亦然。在函数式语言中,通常将迭代循环重写为尾部递归。只要函数语言是图灵完备的,并且它们都是,那么它就可以计算任何可计算的函数。因此,任何循环都可以迭代表示。

迭代函数通常的工作方式如下:

   function iterative(args)
     while not done_with(args)
       args = transform(args)
     end while
     return args
   end function
一旦将迭代函数转换为这种形式,就可以将其简单地转换为递归函数,如下所示:

   function recursive(args)
     if done_with(args)
       return args 
     else
       return transform(args)
     end if
   end function

迭代函数的通常工作方式如下所示:

   function iterative(args)
     while not done_with(args)
       args = transform(args)
     end while
     return args
   end function
一旦将迭代函数转换为这种形式,就可以将其简单地转换为递归函数,如下所示:

   function recursive(args)
     if done_with(args)
       return args 
     else
       return transform(args)
     end if
   end function

递归函数是一个调用自身的函数。如果调用从未发生过,它真的是递归的吗?我会说不,说得好。但如何递归地设计一个返回参数加1的函数呢?好问题。根据限制,这可能是不可能的。但是,如果在函数中添加另一个参数,或者使用辅助函数,则这是可能的。如果你假设的是无限精度算法,那么你也可以用一个参数来实现(因为你有空间在其中编码某些额外的信息)。如果调用从未发生过,它真的是递归的吗?我会说不,说得好。但如何递归地设计一个返回参数加1的函数呢?好问题。根据限制,这可能是不可能的。但是,如果在函数中添加另一个参数,或者使用辅助函数,则这是可能的。如果你假设的是无限精度的算术,那么你也可以用一个参数来实现(因为你有空间在其中编码某些额外的信息)。只有当函数是基元递归函数时,才能实现相反的效果。例如,并非所有递归函数都是Ackermann函数:[不可能迭代表示如果函数可以由巡回机器计算,则可以将任何递归函数转换为具有堆栈的迭代函数,该堆栈基本上复制调用堆栈上的函数。只有当函数是基元递归函数时,才可能出现相反的情况。例如,并非所有递归函数都是Ackermann函数:[不可能迭代表示如果函数可以由巡回机器计算,则可以将任何递归函数转换为具有堆栈的迭代函数,该堆栈基本上复制调用堆栈上的函数。