Я не понимаю, почему эта функция приводит к ошибке переполнения стека. Если бы кто-нибудь мог мне это объяснить, я бы очень признателен!Результаты рекурсивной функции в StackOverflowError
public static int count7(int n){
if(n == 0){
return 0;
}
if (n==7){
return 1;
}
if (n%10 == 7){
return 1 + count7(n/10);
}
else{
return count7(n/10);
}
}
он отлично работает с «7777777» и тому подобное, но «999999» дают ошибку, как хорошо, как «123» и «47571».
Поэтому я добавил:
if(n == 0){
return 0;
}
и теперь, кажется, работает!
Возьмите номер 123 и посмотрите, что представляет собой поток выполнения. О, также это довольно плохой пример использования рекурсии (я надеюсь, что это просто упражнение). –
@ZouZou Почему это плохое использование для рекурсии? И да, это всего лишь упражнение для изучения того, как работает рекурсия, и она использовалась. – Gurkang
Потому что это те методы, которые вы могли бы сделать, используя простой цикл. –