我正在用代数公式练习在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);
}但是,当我编译和运行它时,它不会返回预期的结果。如何修正此方法以正确应用我试图模拟的公式?
发布于 2016-03-28 23:21:21
由于这不是一个作业,只是练习,下面是一个基于你问题中的信息的有效解决方案。此解决方案适用于所有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) = 18sumDownBy3(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发布于 2016-03-28 22:52:39
所以,这里有一些建议,希望能让你考虑一下奇罗夫松和琼尼·亨利的评论。
你要找的只是:
f(n) = n + f(n-3),n> 0。
递归函数应该只检查n是否为<= 0。如果是,则返回0。否则,使用n-3返回变量n+对函数的另一个调用。
希望这能帮上忙,而不把太多东西送出去。
https://stackoverflow.com/questions/36272400
复制相似问题