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函数:[不可能迭代表示如果函数可以由巡回机器计算,则可以将任何递归函数转换为具有堆栈的迭代函数,该堆栈基本上复制调用堆栈上的函数。