Java-使用递归将一个数与该数之差和3的倍数相加
我正在做代数公式的练习,以练习在Java中使用递归 我正在尝试编写一个方法,返回n+(n-3)+(n-6)+(n-9)…+的结果0 例如,当n=7时,结果应为12。 当n=10时,结果应为22 到目前为止,我的情况如下:Java-使用递归将一个数与该数之差和3的倍数相加,java,recursion,sum,Java,Recursion,Sum,我正在做代数公式的练习,以练习在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 = (
public static int sumDownBy3(int n)
{
if(triSum <= 0)
{
return sum;
}
sum = n;
triVar += 3;
triSum = (n - triVar);
return sumDownBy3(n + triSum);
}
public static int sumDownBy3(int n)
{
如果(triSum是这样的话,那么考虑到ChildofSong和Jonny Henly的评论,这里有一些建议希望能让你继续下去
您需要的只是:
f(n)=n+f(n-3)
表示n>0
你的递归函数应该只检查n是否,因为这不是一个赋值,只是练习一下,然后根据你问题中给出的信息,这里有一个有效的解决方案。这个解决方案适用于所有n
,但是n哦,天哪,对不起,我粘贴了错误的方法。让我来解决这个问题。我认为重要的是注意,您的公式可以分解为f(n)=n+f(n-3)的递归关系
对于n>0。也就是说,如果传递一个负数,它应该返回什么?0?当你使用递归时,你应该传递所有变量作为参数。你所需要的只是n
而不是其他变量。我部分同意你的回答。唉…漫长的一天。你是正确的。我会修正的。谢谢你的评论。
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): 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