Cindro
Cindro

Reputation: 1065

C Program to calculate sum of numbers X to Y using recursion

I have below code which works fine.

#include<stdio.h>

int calculateSum(int);

int main() {
    int num;
    int result;

    printf("Input number = ");
    scanf("%d", &num);

    result = calculateSum(num);
    printf("\nResult from 1 to %d = %d", num, result);

    return (0);
}

int calculateSum(int num) {
    int res;
    if (num == 1) {
        return (1);
    }
    else {
        res = num + calculateSum(num - 1);
    }
    return (res);
}

Input number = 5
Result from 1 to 5 = 15

Now I am trying to give the program 2 inputs, from and to numbers.

Example: first input = 5, second = 8 and result should be = 26 (5 + 6 + 7 + 8)

Any ideas of how to go about this? failing thus far.

Upvotes: 0

Views: 1883

Answers (5)

Paulo Pereira
Paulo Pereira

Reputation: 1115

You can use ternary operator.

int calculateSum(int from, int to) {
    return from == to ? from : from + calculateSum(from + 1, to);
}

Upvotes: -1

paxdiablo
paxdiablo

Reputation: 881293

At the moment, you are hard-coding 1 as the terminating point of the recursion.

What you need is to be able to use a different value for that, and the following pseudo-code shows how to do it:

def calculateSum(number, limit):
    if number <= limit:
        return limit
    return number + calculateSum(number - 1, limit)

For efficiency, if you break the rules and provide a limit higher than the starting number, you just get back the number. You could catch that and return zero but I'll leave that as an exercise if you're interested.

It should be relatively easy for you to turn that into real code, using your own calculateSum as a baseline.


I should mention that this is a spectacularly bad use case for recursion. In general, recursion should be used when the solution search space reduces quickly (such as a binary search halving it with each recursive level). Unless your environment does tail call optimisation, you're likely to run out of stack space fairly quickly.

Upvotes: 1

K. Chadha
K. Chadha

Reputation: 96

int calculateSum(int fromNum, int toNum) {
    int res;
    if (fromNum == toNum) {
        return (fromNum);
    }
    else {
        res = fromNum + calculateSum((fromNum + 1), toNum);
    }
    return (res);
}

Upvotes: 3

D T
D T

Reputation: 3746

change 1 to from:

int calculateSum(int from,int to) {
    int res;
    if (to== from) {
        return (from);
    }
    else {
        res = to+ calculateSum(from,to - 1);
    }
    return (res);
}

Upvotes: 0

Barmar
Barmar

Reputation: 780851

Instead of stopping when you reach 1, stop when you reach from.

int calculateSum(from, to) {
    if (to == from) {
        return from;
    } else {
        return to + calculateSum(from, to-1);
    }
}

Upvotes: 0

Related Questions