Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将递归函数重写为非递归函数_C++_Recursion - Fatal编程技术网

C++ 将递归函数重写为非递归函数

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 *

嗨,我需要重写这个函数,这样它就没有递归了。我试着用数学方法解决这个问题,但没用。我是编程新手,所以任何帮助都将不胜感激。提前谢谢

我假设在你的问题中,如果(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(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;
}