Je me demandais comment faire qu'une fonction considère un paramètre donné comme une variable statique. Par exemple, je l'ai essayé, sans succès, pour générer des nombres de grêlon:Elaborer un paramètre de fonction comme variable statique
#include<stdio.h>
int hailstone(int);
int n; /* n is an extern variable*/
int main(){
hailstone(n);
return 0;
}
int hailstone(int n){
static int m = n; /*not possible because n is not constant*/
if(m % 2 == 0 && m != 1)
hailstone(m /= 2);
else if(m != 1)
hailstone((m *= 3) + 1);
else
exit(0); /*Is the use of exit() correct, in this case?*/
return 0;
}
Je voudrais utiliser une variable statique pour élaborer n. Sinon, chaque appel récursif fonctionnerait sur l'ensemble du paramètre n
, continuant sans fin, n'atteignant jamais la base de casse.
Peu de questions:
- Est-ce que cette idée représente une approche réaliste du problème?
- Est-ce que cette idée représente une approche raisonnable/efficace au problème?
- Est-ce que
exit(0)
est utilisé correctement, dans un cas similaire?
'statique m int; m = n; 'est possible, cependant. – Bathsheba
L'utilisation d'une variable globale dans une fonction récursive élimine le point de récursivité. Vous devez donc absolument repenser votre solution. Dans tous les cas, votre fonction ne montre aucun cas de base (autre que 0, qui ne peut être atteint). Quel est le cas de base, à votre avis, et pourquoi pensez-vous que la récursivité ne l'atteindra pas? – rici
@ricie, la base de cas n'est-elle pas représentée par 'm <1'? Peut-être, puisque le résultat final devrait être 1, 'm == 1' pourrait être un meilleur cas de base, vous avez raison. En outre, j'étais précisément en train de me demander comment dépasser le problème de la variable globale. – Worice