Java-使用递归将一个数与该数之差和3的倍数相加

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 = (

我正在做代数公式的练习,以练习在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);
}
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