Я недавно узнал о рекурсии хвоста. Я понимаю, что многие компиляторы языка программирования выполняют [Current java is not] s, оптимизируют код, когда он находит рекурсивный метод «Рекурсивный хвост».Рекурсия хвоста Java: ниже рекурсивного кода хвоста Фибоначчи?
Мое понимание ТР: Компилятор не создает новый стек кадров (вместо этого заменяет собой стек стека старого вызова), если после завершения вызова не будет выполняться никаких дальнейших операций.
Под кодом [хотя в java] хвост рекурсивный?
предположит, что totalSeriesLenght = 10.
public void generateFibonacciSeries(int totalSeriesLenght) {
int firstNum = 0;
int secondNum = 1;
printNextFibonacciNumber(firstNum, secondNum,totalSeriesLenght);
}
public void printNextFibonacciNumber(int fiboOne , int fiboTwo,int totalSeriesLenght) {
if(totalSeriesLenght >= 1) {
System.out.print(fiboOne + ",");
int fiboNext = fiboOne + fiboTwo;
totalSeriesLenght --;
printNextFibonacciNumber(fiboTwo, fiboNext,totalSeriesLenght);
}
}
Java не выполняет никакой оптимизации кода для рекурсии хвоста: http://stackoverflow.com/questions/3616483/why-does-the-jvm-still-not-support-tail-call-optimization – Tunaki