迭代到递归

时间:2010-09-26 18:04:48

标签: c++ c algorithm recursion iteration

  

可能重复:
  Can all iterative algorithms be expressed recursively?

是否总能在递归函数中转换迭代函数?

5 个答案:

答案 0 :(得分:2)

算法的算法实现是两回事。术语递归也意味着不同的东西,这取决于它是应用于算法本身还是应用于其特定实现。从你的问题中不清楚你在谈论哪一个。

总是可能将递归实现转换为迭代实现,其中“递归”和“迭代”只是一个语法属性用程序语言编写的程序,如C或C ++。

递归算法转换为迭代算法 通常不可能,其中“递归”和“迭代”描述了基本结构算法本身。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

取决于该功能的作用。

当然,您可以将此添加到您的功能中:

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

迭代函数的常用方法看起来像这样:

   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