在c ++中使用递归时,如何避免重新初始化变量?

时间:2015-10-04 03:56:40

标签: c++ recursion

所以我刚刚开始学习递归,我很困惑如何避免这个问题。我将编写一个需要存储变量的函数,如sum,但我必须在函数中声明变量,因此每次进行递归调用时,变量都会再次初始化。我怎样才能解决这个问题?我认为一个简短的辅助功能,但我不太确定。

int fib_tail(int n)
{    
    int fibResult = 0;
    int x = 0; // used for bottom-up approach
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    if (n > 1 && x <= n) {
        fibResult += fib(x);
    }
    ++x;
    return fib_tail(n);
}

1 个答案:

答案 0 :(得分:4)

如果您提供了代码,这将有所帮助。但是通常你会传递你需要的任何东西并返回结果。

一个例子:

int Sum(Node* node)
{
    if (node == 0)
        return 0;
    return node->value + Sum(node->next);
}

修改

以下是我在你的例子中会做的事情:

int fib_tail(int n)
{    
    if (n <= 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    return fib_tail(n-1) + fib_tail(n-2);
}

Ide one:http://ideone.com/hS2s38