C++ 将递归函数重写为非递归函数
嗨,我需要重写这个函数,这样它就没有递归了。我试着用数学方法解决这个问题,但没用。我是编程新手,所以任何帮助都将不胜感激。提前谢谢 我假设在你的问题中,如果(x>0),它真的应该是C++ 将递归函数重写为非递归函数,c++,recursion,C++,Recursion,嗨,我需要重写这个函数,这样它就没有递归了。我试着用数学方法解决这个问题,但没用。我是编程新手,所以任何帮助都将不胜感激。提前谢谢 我假设在你的问题中,如果(x>0),它真的应该是 然后检查函数,我们看到foo(0)=1,否则foo(x)=(x-1)+2*foo(x-1)。因此foo(x)只依赖于foo(x-1)。因此,您可以简单地使用迭代来推进结果 int foo(int x) { if (x >= 0) { return (x - 1) + 2 *
然后检查函数,我们看到foo(0)=1
,否则foo(x)=(x-1)+2*foo(x-1)
。因此foo(x)
只依赖于foo(x-1)
。因此,您可以简单地使用迭代来推进结果
int foo(int x)
{
if (x >= 0)
{
return (x - 1) + 2 * foo(x - 1);
}
else
{
return 1;
}
}
如果它真的是如果(x>=0)
,我将它作为一个练习留给您来调整代码。您到底尝试了什么?你确定如果(x>0)
它不是?考虑:f(0)=1
和f(n)=(n-1)+2*f(n-1)
。如果我们知道n-1
的值,我们就知道n
的值。这可以写成for循环吗?昨天有一个相关的问题:。如果(x>=0)
是正确的,则显示<代码>foo(-1)=1
。恰好foo(0)=1
也是如此。@Walter谢谢你的帮助。在这个问题中,如果(x>=0),它的,
有什么方法使它适应它吗?是的@Sahu,根据你发布的链接,这是一个相关的问题。@Alan1我认为你收到了很多帮助和提示,你应该能够自己解决这个问题。想想x=-1
的结果是什么,然后从那里开始循环。始终检查递归函数和非递归函数是否得到相同的答案。@Walter,谢谢,我自己已经解决了这个问题。非常感谢你的帮助!
int foo(int x)
{
auto result=1; // result if x=0
for(int n=0; n!=x; ++n) // increment result to desired x
result=n+2*result; // corresponds to (x-1)+2*foo(x-1) in original
return result;
}