可能重复:
Can all iterative algorithms be expressed recursively?
是否总能在递归函数中转换迭代函数?
答案 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