Queue récursive en C

J’essayais d’écrire une fonction de récursivité pour trouver la factorielle d’un nombre.

int factorial(int input,int *answer) { if ( input ==0 ) { return 0; } *answer = *answer * input; factorial(input -1, answer); } 

Qu’allez-vous dire à propos de cette fonction? Est-ce la queue récursive?

Lorsque vous exécutez des fonctions récursives de queue (en particulier des fonctions récursives de queue), il est souvent utile de disposer d’une fonction d’assistance en plus d’une autre fonction offrant une interface plus conviviale. La fonction d’interface conviviale ne fait que définir les arguments de la fonction moins conviviale.

 static unsigned factorial_helper(unsigned input, unsigned acc) { if (intput == 0) { return acc; } return factorial_helper(input-1, acc * input); } unsigned factorial(int input) { if (input < 0) { do_something_bad(); } return factorial_helper(input, 1); } 

En passant une valeur d'accumulateur, vous évitez d'avoir à utiliser des pointeurs ou à effectuer des calculs lors du retour de fonctions appelées, ce qui les rend véritablement récursives.

Voici un lien avec une définition: http://phoenix.goucher.edu/~kelliher/cs23/feb21.html

“Une fonction est fin récursive si la dernière chose qu’elle fait est de faire son appel récursif.”

Dans le code que vous avez publié, la dernière chose que fait la fonction est de se faire un appel récursif. Ainsi, selon cette définition, elle est récursive.