我已经编写了以下用于生成数字总和的代码,例如,如果我输入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,这也是错误的。如果它正在为总和工作,那么它也应该起作用(如果我错了,请纠正我)。对此有任何帮助或指导。?
答案 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);
}