我的代码返回了错误的答案,不知道为什么

时间:2018-02-22 17:18:19

标签: c#

using System;

class Test
{
    public int GrazintPitaka(int likutis, int pitakai)
    {
        if(likutis == 0)
            return pitakai;
        pitakai = pitakai + 5;
        likutis--;
        GrazintPitaka(likutis, pitakai);
        return pitakai;
    }

    public Test()
    {

    }
}
class Solution
{
    static void Main(string[] args)
    {
        Test test = new Test();
        Console.WriteLine(test.GrazintPitaka(5, 0));
    }
}

为什么这段代码会返回5而不是25?

我试图一步一步地调试它,它计算到25然后打印5.为什么?

3 个答案:

答案 0 :(得分:6)

您需要return GrazintPitaka

public int GrazintPitaka(int likutis, int pitakai)
{
    if(likutis == 0)
        return pitakai;
    pitakai = pitakai + 5;
    likutis--;
    return GrazintPitaka(likutis, pitakai);
}

答案 1 :(得分:1)

GrazintPitaka方法中,这些行:

    likutis--;
    GrazintPitaka(likutis, pitakai);

非常无用,因为它不会影响结果。也许您想要指定GrazintPitaka(likutis, pitakai)的返回值并使用它,但您没有这样做,因此当0 + 55时,您的代码按预期工作。

   if(likutis == 0)
        return pitakai;

对于使用预处理器的语言中的单行不使用{}就像是为更严重的项目寻找麻烦。

答案 2 :(得分:1)

功能的每个深度中的每个pitakailikutis 不同。返回值不会更改外部函数级别中pitakai的值。这就是为什么你不能得到理想的结果。

要获得所需的结果,您必须写

pitakai = GrazintPitaka(likutis, pitakai);

以便为每个深度更新。