递归函数返回错误的值

时间:2014-10-03 10:10:31

标签: algorithm recursion

我已经编写了以下用于生成数字总和的代码,例如,如果我输入10,它将生成它的总和,如10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0输出:55工作正常。

public int GenerateSum(int num)
    {
        if (num <=0)
        {
            return 0;
        }
        int temp = num + GenerateSum(num - 1);
        return temp;
    }

现在我已经更改了此代码以生成差异,例如,如果我输入一个数字10,它将生成它的区别,如10-9-8-7-6-5-4-3-2-1 -0输出:-35

public int GenerateDifference(int num)
    {
        if (num <= 0)
        {
            return 0;
        }
        int temp = num - GenerateDifference(num - 1);
        return temp;
    }

现在,当我运行GenerateDifference(10)时,它返回输出5.对于GenerateDifference(100),它给出了输出50,这也是错误的。如果它正在为总和工作,那么它也应该起作用(如果我错了,请纠正我)。对此有任何帮助或指导。?

5 个答案:

答案 0 :(得分:3)

上面的代码给出了5,因为当你使用递归生成10-9-8-7-6-5-4-3-2-1-0时,最终会做什么递归

10 - ( 9 - ( 8 - ( 7 - ( 6 - ( 5 - ( 4 - ( 3 - ( 2 - ( 1 - 0) ) ) ) ) ) ) ) ) 

解决上面的等式,你会得到5作为答案

由于您需要10-9-8-7-6-5-4-3-2-1-0的解决方案,因此您可以将其简化为10 - ( 9+8+7+6+5+4+3+2+1+0 )。然后使用递归得到答案,你需要这样的东西

public int GenerateDifference(int num)
{
    if (num <= 0)
    {
        return 0;
    }
    int temp = num - GenerateSum(num - 1);
    return temp;
}

答案 1 :(得分:1)

您将使用10-9-8-7-6-5-4-3-2-1-0获取10 - GenerateSum(9)的值。

答案 2 :(得分:1)

这是一个标志问题:

10 - (9 - (8 - (7-(6-(5-(4-(3-(2-(1-(0)))))))))))= 10 - 9 + 8 - 7 + 6 -5 +4 -3 +2 -1 = 5

答案 3 :(得分:0)

这个怎么样?

public int GenerateDifference(int num)
{
    if (num <= 0)
    {
        return 0;
    }
    int temp = num - GenerateSum(num - 1);
    return temp;
}

public int GenerateSum(int num)
{
    if (num <=0)
    {
        return 0;
    }
    int temp = num + GenerateSum(num - 1);
    return temp;
}

答案 4 :(得分:0)

关于PHP的示例。

function sum($n) {
    if ($n <= 0) return 0; else return $n + sum($n-1);
}

function diff($n) {
    return $n - sum($n - 1);
}