Java - 使用递归对一个数字求和,该数字与该数字的差值和3

时间:2016-03-28 22:39:04

标签: 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 = (n - triVar);

    return sumDownBy3(n + triSum);
}

但是,当我编译并运行它时,它不会返回预期的结果。 我如何修复此方法以正确应用我试图模拟的公式?

2 个答案:

答案 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