В чем причина StackOverflowError? Я пытался это сделать какое-то время, но все равно не могу понять, почему это происходит, и как это исправить.Исправление Исключение в потоке «main» java.lang.StackOverflowError
Формула, используемая в коде, является требованием.
public static long fib(long n){
if(n == 1 || n == 2)
return 1;
else if(n > 2 && n%2 == 0)//even
return fib((n/2+1)*(n/2+1)) - fib((n/2-1)*(n/2-1));
else //odd
return fib(((n+1)/2)*((n+1)/2)) + fib(((n-1)/2)*((n-1)/2));
}
public static void main(String[] args){
for(int i = 1; i <= 10; i++)
System.out.println(fib(i)+" ");
}
у вас есть рабочий Фибоначчи рутина здесь, где не используется бесконечная рекурсия (и конечная рекурсия): http://stackoverflow.com/questions/29530090/iteral-fibonacci-java-code-returns-0-when-fibonacci-sequence-2 –
Вы получаете бесконечное рекурсия, потому что '((n + 1)/2) * ((n + 1)/2)> n' –