我正在使用代数公式进行练习,以练习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

07-28 02:53
查看更多