无论发生什么,它都是0

时间:2013-12-04 15:18:39

标签: c++ recursion

unsigned long long F(unsigned long long p, unsigned long long N)
{
    unsigned long long s = 0ull;

    if (p < N)
        for (int i = p+1; (N-i) > i; ++i)
            s += F(i, N-i);

    return s;
}

函数总是返回零,尽管输入是什么。为什么会这样?

3 个答案:

答案 0 :(得分:4)

F()应该做什么?

每个p, N确实返回零 - 您必须在某处向s添加一些非零值,您只需添加s F(...)的结果,即再次,零。

你有没有错过一些你想在某一行添加到s的其他价值?

答案 1 :(得分:2)

对于不是无限的递归,iffor主体不能在更深层次的嵌套调用中执行。该函数将等效于unsigned long long s = 0ull; return s;并返回0.调用者将该0添加到它的局部变量s,产生0.对F的所有调用最终都会添加0并返回结果

答案 2 :(得分:2)

采用以下功能,这是您的简化版本:

int F(int a, int b)
{
    int c = 0;

    if (a < b)
    {
        c += F(a + 1, b);
    }

    return c;
}

电话F(1, 3)如下:

F(1, 3)
c = 0 +
    F(2, 3)
    c = 0 +
        F(3, 3)
        c = 0

0 + 0 + 0 = 0

正如其他人已经提到的那样,因为您正在初始化c = 0,所以您得到的结果为零。