2016-01-14 2 views
1

я должен написать код Java (его не домашнее задание)Java рекурсии сумма нечетности

Мы принимаем метод Int N и мы возвращаемся:

Если (п положительные и нечетные) -> 1 + 3 + 5 + ... + п

Если (п положительно и даже) -> 2 + 4 + 6 + .. + п

Если (п отрицательное или ноль) -> возврат 0

Я знаю, как делать эти три отдельно, но вместе?

Например если (п положительных и даже) -> 2 + 4 + 6 + .. + п

public int addeven(int n) 
{ 
    if(n<0) 
    { 
    return 0;  
    } 
    if(n%2 != 0 && n>0) 
    { 
    return (n+addeven(n-1)); 
    } 

} 

Кроме того, что именно делает возвращение (п + addeven (п-1)) означают здесь ?

+0

Если это не домашнее задание, какое приложение нуждается в этой функции? :-D – Leo

+2

Нет. Я преподаю себе Java, и это пример, решенный в книге, но я пытаюсь сделать это сам, потому что у меня всегда были проблемы с рекурсией. –

+0

Это не должно компилироваться. Методы с не-void возвращаемым типом должны иметь оператор return на каждом возможном пути выполнения. Ваш метод не удовлетворяет этому условию. – fabian

ответ

3

В обоих случаях вам нужно n + (n-2) + (n-4) ... так это должно работать:

public int addStrange(int n) { 
    if (n <= 0) { 
     return 0; 
    } 
    return n + addStrange(n - 2); 
} 
+0

Что означает addStrange (n-2)? –

+0

@KamiH: Вы еще не узнали о вызовах методов? – fabian

+0

Это означает значение 'addStrange' с параметром' n-2'. Это то, что означает рекурсия. Подумайте об этом как 'f (x) = x + f (x-2)'. – OldCurmudgeon

0

Кроме того, что именно делает возврат (п + addeven (п-1)) означают здесь?

внешней скобки не нужен, так что это на самом деле

return n+addeven(n-1); 

Что это означает возврат к вызывающей сумме п и результату вызова addeven с п - 1. Этого вызовом addeven является рекурсивная часть функции. Вы вызываете тот же самый метод, который вы используете, но с другими параметрами. Java (наряду со всеми неархаическими языками) позволит это. Он отслеживает каждый незавершенный вызов в стеке. Важно, чтобы ваша рекурсивная функция в конечном итоге возвращалась, не вызывая себя, или у вас есть бесконечная рекурсия и получите переполнение стека.

-1

Зачем использовать рекурсию? Например, если n четно, то ответ будет (n + 2) * n/4

+0

Потому что это самопринятое упражнение в рекурсии (согласно комментарию). – Andreas

+0

Ah - Я видел только его оригинальное сообщение, в котором ничего не говорится о попытке рекурсии. – FredK

+0

Ну, название видa делает. ;-) – Andreas

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