Суммирование рекурсивных целых чисел с Java - PullRequest
0 голосов
/ 23 декабря 2010

Я должен вычислить сумму двух целых чисел, используя рекурсивный алгоритм, но искренне я не знаю, как это сделать. Вот условия:

сумма (х, у) =?
если x = 0 , то sum (x, y) = y в противном случае sum (x, y) = sum (предшественник (x), преемник (y) ).

У кого-нибудь есть идея, как я мог бы написать это в алгоритме? Буду рад любому совету.

Ответы [ 5 ]

7 голосов
/ 23 декабря 2010

Я не дам вам код, поскольку это домашняя работа, но вот грубый алгоритм:

predecessor(x) = x - 1
successor(x) = x + 1

sum(x, y) = 
  if x = 0 
    then y 
    otherwise sum(predecessor(x), successor(y))
1 голос
/ 23 декабря 2010

Для обработки отрицательных чисел, основанных на ответе @ aioobe.

sum(x, y): return x == 0 ? y : x < 0 ? ~sum(~x, -y) : sum(x-1, y+1)

Примечание: довольно оптимистичное использование ~, чтобы избежать увеличения x = MIN_VALUE.;)

1 голос
/ 23 декабря 2010

Javaish псевдокод, соответствующий вашему коду в вашем вопросе

sum(x, y): return x == 0 ? y : sum(x-1, y+1)

Работает для любой пары чисел, где x - неотрицательное целое число.

1 голос
/ 23 декабря 2010

Это самое простое, что я мог себе представить

public static void main(String[] args) {
    System.out.println("4+5 = " + sum(4, 5));
    System.out.println("4+(-5) = " + sum(4, -5));
    System.out.println("-4+5 = " + sum(-4, 5));
    System.out.println("-4+5 = " + sum(-4, -5));
}

public static int sum(int x, int y) {
    if (x < 0) {
        x *= -1;
        y *= -1;
    }
    return (x == 0 ? y : sum(--x, ++y));
}
1 голос
/ 23 декабря 2010

Вот мое решение для i & j both> = 0. set sum = 0;и вычтите 1, пока он не станет <= 0 </p>

 public static int sum(int i, int j){
           return sum(i,j,0);
 }

 private static int sum(int i, int j, int sum) {
    if (i <= 0 && j <= 0) {
        return sum;
    } else if (i <= 0) {
        return sum(0, j - 1, sum + 1);
    } else if (j <= 0) {
        return sum(i - 1, 0, sum + 1);
    } else {
        return sum(i - 1, j - 1, sum + 2);
    }
}

    public static void main(String[] args) {
        System.out.println(sum(60, 7)); 

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...