2010-11-13 7 views
0

J'ai un code factorielTracing ordre d'exécution en 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); 
    } 
} 

Il a été tracée à l'aide Trace, ce qui est la sortie:

alt text

Est-ce que cela veut dire qu'une partie de récursion toujours fait d'abord, et la multipication est plus tard?

Répondre

0

La récursivité doit être effectuée en premier, car c'est un argument de la multiplication. Avant que la récursivité ne soit faite, qu'est-ce qui serait même multiplié?

Je ne pense pas que votre sortie Trace vous le dise, cependant. Je réponds seulement après avoir lu le code.

0

Il est possible d'implémenter factorielle en utilisant la récursion de queue, mais dans votre code, la multiplication suit l'appel récursif de sorte qu'une optimisation de queue de queue ne peut pas être appliquée.

0

Bien sûr, l'appel récursif doit être évalué en premier. Vous multipliez deux expressions, dont l'une est simplement une valeur (N) l'autre est un appel récursif. Sans faire l'appel et obtenir le résultat en premier, comment voulez-vous le multiplier par N?