我正在使用代数公式进行练习,以练习Java中递归的使用。
我正在尝试编写一种返回n +(n-3)+(n-6)+(n-9)... + 0的结果的方法。
例如,当n = 7时,结果应为12。
当n = 10时,结果应为22。
到目前为止,这就是我所拥有的:
public static int sumDownBy3(int n)
{
if(triSum <= 0)
{
return sum;
}
sum = n;
triVar += 3;
triSum = (n - triVar);
return sumDownBy3(n + triSum);
}
但是,当我编译并运行它时,它不会返回预期的结果。
如何解决此方法以正确应用要尝试模拟的公式?
最佳答案
由于这不是一项作业,请练习,然后基于您问题中给出的信息,这是一个可行的解决方案。此解决方案适用于所有n
,但是n <= 0
将始终返回0
。
public static int sumDownBy3(int n) {
if (n <= 0) {
return 0;
}
return n + sumDownBy3(n - 3);
}
此示例没有使用额外的参数或全局/类变量来跟踪总和,而仅使用堆栈来跟踪总和。这种方法的缺点是,对于非常大量的堆栈,堆栈可能会溢出和/或程序可能会锁定。
输出:
sumDownBy3(7) = 12
sumDownBy3(10) = 22
sumDownBy3(9) = 18
sumDownBy3(10)
的细分:sumDownBy3(10): 10 !<= 0 -> return 10 + sumDownBy3(10 - 3)
sumDownBy3( 7): 7 !<= 0 -> return 7 + sumDownBy3( 7 - 3)
sumDownBy3( 4): 4 !<= 0 -> return 4 + sumDownBy3( 4 - 3)
sumDownBy3( 1): 1 !<= 0 -> return 1 + sumDownBy3( 1 - 3)
sumDownBy3(-2): -2 <= 0 -> return 0
So 0 + 1 + 4 + 7 + 10 ='s 22