2015-12-01 4 views
-6
public static int func(int n){ 
    int result ; 
    result = func(n - 1); 
    return result; 
} 

Почему я получаюПочему этот метод вызывает бесконечную рекурсию?

Исключение в потоке "главный" java.lang.StackOverflowError

, когда я называю этот метод?

+3

Хорошо, что бы вы ожидали от вас? Как вы ожидаете, что это когда-нибудь закончится? –

+1

Почему бы и нет? Вы всегда вызываете 'func' внутри метода' func'. Когда, по вашему мнению, программа достигнет «возвращения»? – Tom

+0

https://en.wikipedia.org/wiki/Infinite_loop#Infinite_recursion – HRgiger

ответ

1

func всегда называет себя. Состояние остановки отсутствует. Каждый вызов создает новый стек стека, пока стек вызовов не будет заполнен, и будет сброшен StackOverflowError.

Рекурсивные методы всегда должны иметь условие остановки. Например: n < 0:

public static int func(int n){ 
    int result; 
    if (n >= 0) 
     result = func(n - 1); 
    else 
     result = 0; 
    return result; 
} 
+0

Спасибо большое, господин Эран –

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