简体   繁体   中英

Java - Using recursion to sum a number with the difference of that number and multiples of 3

I am doing exercises with algebraic formulas to practice the use of recursion in Java.

I am trying to write a method that returns the result of n + (n - 3) + (n - 6) + (n - 9) ... + 0.

For example, when n = 7, the result should be 12. When n = 10, the result should be 22.

So far, this is what I have:

public static int sumDownBy3(int n)
{

    if(triSum <= 0)
    {
        return sum;
    }

    sum = n;
    triVar += 3;
    triSum = (n - triVar);

    return sumDownBy3(n + triSum);
}

However, when I compile and run it, it does not return the expected result. How may I fix this method to correctly apply the formula I am trying to emulate?

So, here are a few tips to hopefully get you going considering the comments by childofsoong and Jonny Henly.

What you are looking for is simply:

f(n) = n + f(n-3) for n > 0.

Your recursive function should just check if n is <= 0. If it is, return 0. Else return the variable n + another call to your function with n-3.

Hope this helps without giving too much away.

Since this isn't an assignment, just practice, then here is a working solution based off the information given in your question. This solution works for all n , however n <= 0 will always return 0 .

public static int sumDownBy3(int n) {
    if (n <= 0) {
        return 0;
    }

    return n + sumDownBy3(n - 3);
}

Instead of having an extra parameter or global/class variables keeping track of the sum, this example just uses the stack to keep track of the sum. One downside to this approach is that for a very, very large number the stack could overflow and/or the program could lock up.

Output:

sumDownBy3(7)  = 12
sumDownBy3(10) = 22
sumDownBy3(9)  = 18

Breakdown for 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM