我正在用代数公式练习练习在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);
}
但是,当我编译并运行它时,它不会返回预期的结果。 我如何修复此方法以正确应用我试图模拟的公式?
答案 0 :(得分:2)
所以,这里有一些技巧可以帮助你考虑childofsoong和Jonny Henly的评论。
您正在寻找的只是:
对于n&gt; f(n) = n + f(n-3)
0
你的递归函数应检查n是否为&lt; = 0.如果是,则返回0.否则返回变量n +用n-3对函数的另一次调用。
希望这会有所帮助而不会放弃太多。
答案 1 :(得分:1)
由于这不是一项任务,只是练习,这里是一个基于你问题中给出的信息的工作解决方案。此解决方案适用于所有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