2016-12-16 2 views
-2

Простой способ решения моей проблемы будет следующий метод:сумма чисел внутри определенного диапазона с использованием рекурсии

public int sum(int num) 
{ 
    if(num == 1) 
     return 1; 
    else 
     return num + sum(num - 1); 
} 

Моя проблема начинается, когда я пытаюсь решить ту же проблему, используя следующее рекурсивное определение: «Сумма от 1 до N равна сумме от 1 до N/2 плюс сумма N/2 + 1 до N».

Я попытался следующие, но я застрял в бесконечном цикле ...

public int sum(int max, int base) 
{ 

    if(max == base) 
     return base; 
    else 
     return max/2 + sum(max/2 - 1, 1) + max + sum(max-1, max/2 + 1); 
} 

Я не могу показаться, чтобы найти путь вперед ...

+0

как макс и база относятся к N? и что, если база больше, чем макс? – user3437460

+2

Это ваша домашняя работа!? – Zorglube

+1

Подсказка: начните с переименования параметров слишком низко. Потому что это то, что они на самом деле означают *; и один, который может помочь вам определить «правильный» способ вызова вашего метода. – GhostCat

ответ

1

Вы близки, попробовать что-то например

@Test 
public void recursive(){ 
    int number = 20; 
    System.out.println(sum(0, number)); 
    System.out.println(sum(0, number/2)); 
    System.out.println(sum(number/2 +1, number)); 
    Assert.assertThat(sum(0, number), is(sum(0, number/2) + sum(number/2 +1, number))); 
} 

private int sum(int origin, int end) { 
    if(origin == end) 
     return end; 
    return origin + sum(origin+1, end); 
} 
+0

@Gabriel: please * do * run this: это базовый метод отладки, который вам понадобится в вашей карьере. Я все еще использую его после четырех десятилетий в поле, и это мое самое полезное оружие. Если у вас есть больной пациент, попросите его рассказать вам, где вещи не чувствуют себя хорошо. – Prune

Смежные вопросы