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.为什么?
答案 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 + 5
为5
时,您的代码按预期工作。
if(likutis == 0)
return pitakai;
对于使用预处理器的语言中的单行不使用{}
就像是为更严重的项目寻找麻烦。
答案 2 :(得分:1)
功能的每个深度中的每个pitakai
和likutis
不同。返回值不会更改外部函数级别中pitakai
的值。这就是为什么你不能得到理想的结果。
要获得所需的结果,您必须写
pitakai = GrazintPitaka(likutis, pitakai);
以便为每个深度更新。