2015-11-01 2 views
0

Почему я получаю исключение переполнения стека? Разве это не означает, что это рекурсивная функция хвоста?Переполнение стека с рекурсией хвоста

public static int tailFact(int n, int mult) { 
    if(n == 0) { 
     return mult; 
    }else { 
     return tailFact(n-1, n*mult); 
    } 
} 

public static int factT(int n) { 
    return tailFact(n, 1); 
} 

public static void main(String[] args) {    
      factT(100000); 
} 


/*Exception in thread "main" java.lang.StackOverflowError 

    at test3.Test.tailFact(Test.java:13) 
    at test3.Test.tailFact(Test.java:13) 
    ... 
*/ 
+0

Где он сказал, что java поддерживает рекурсию хвоста? http://programmers.stackexchange.com/questions/272061/why-doesnt-java-have-optimization-for-tail-recursion-at-all или http://www.drdobbs.com/jvm/tail-call- optimization-and-java/240167044 – zapl

+0

Никогда не знал, что это не так - я довольно новый, но спасибо за добрый ответ. – James

ответ

4

Java не поддерживает рекурсию хвоста.

Смежные вопросы