2010-11-13 4 views
0

У меня есть факториал кодТрассировка порядок выполнения в Java

class FactorialTest { 

    public static void main(String args[]){ 
     System.out.println(factorial(10)); 
    } 

    public static int factorial(int N){ 
     if (N <= 1) return 1; 
     return N*factorial(N-1); 
    } 
} 

Он был прослежен с помощью Trace, и это выход:

alt text

Означает ли это, что рекурсия часть всегда делали во-первых, и мультипликация позже?

ответ

0

Рекурсия должна быть выполнена сначала, поскольку это аргумент умножения. До того, как рекурсия закончится, что бы даже умножилось?

Я не думаю, что ваш вывод Trace говорит вам об этом. Я отвечаю только после прочтения кода.

0

Возможно использование факториала с помощью хвостовой рекурсии, но в вашем коде умножение следует за рекурсивным вызовом, поэтому оптимизация хвостового кэша не может быть применена.

0

Конечно, сначала нужно оценить рекурсивный вызов. Вы умножаете два выражения, одним из которых является просто значение (N), другое - это рекурсивный вызов. Не делая вызов и получая результат первым, как бы вы ожидали умножить это на N?

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