Допустим, вы набираете номер 2.
1-й звонок: printStar(2)
. Печать hello
и звонки printStar(1)
.
2-й звонок: printStar(1)
. Печатает hello
и звонит printStar(0)
.
3-й звонок: printStar(0)
. Ничего не печатает, потому что n > 0
неверно. Но , все еще вызывает printStar(-1)
.
Ваш код вызывает следующий шаг независимо от значения n. В моем понимании того, чего вы хотите достичь, ваш рекурсивный вызов должен быть внутри блока if
. Если n > 0
вернет false, просто верните что-то еще, например -1
.
Код будет выглядеть так:
private static int printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
return printStar(n - 1);
}
return -1;
}
Я должен указать, однако, что я не уверен, что printStar
возврат значения - хорошая идея. Возвращаемое значение всегда будет одинаковым. Вы можете изменить метод на void
. Весь ваш код будет выглядеть так:
public static void main(String[] args) throws java.lang.Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
printStar(Integer.parseInt(input));
}
private static void printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
printStar(n - 1);
}
}