Я работал над проектом Эйлера проблемы 14: https://projecteuler.net/problem=14Sum приращение внутри публичного статического междунар не работает
Я попытался тестовый случай: Вот мой код:
public class problem015 {
public static void main(String[] args) {
System.out.println(Collatz(13));
}
public static int Collatz (int n){
int sum = 1;
if (n == 1)
return sum;
if (n%2 == 0) {
sum ++;
return Collatz(n/2);
}
if (n%2 == 1){
sum ++;
return Collatz(1 + (3*n));
}
else return 0;
}
}
Теоретически, это должно возвращать значение из 10, когда я проверил его с номером 13 (10 номеров в последовательности Collatz, см. ссылку). Однако он просто возвращает начальное значение, которое я присваиваю целой «сумме».
Любые идеи, почему?
EDIT: Я думаю, это потому, что каждый раз, когда он возвращается к функции Collatz, он сбрасывает значение «sum». Если это так, как я могу объявить значение «sum» самостоятельно?
Чтобы ответить на ваш вопрос, просто передайте сумму в качестве аргумента в вызове функции. – Taelsin
'sum' - это локальная переменная в' Collatz() ', поэтому при каждом вызове создается новая' sum' и инициализируется до 1. – Ramanlfc