Stack overflow!!!!

J'ai un probleme: pour des tas d'exercices, le programme que je code est bon pour les 7 premiers tests mais plante pour les 3 autres, et la raison est (pour le 7eme, le reste je sais pas ) " stack overflow" . Je suis allé chercher sur internet , et j'ai cru comprendre que ca voulait dire boucle infinie. Or mes fonctions recursives sont les plus basiques qu'il existe du type let rec qquechose=function[a]-> que chose
|(a::reste)->let truc=qquechose(reste) in un_autre_truc_qui_n'utilise_pas_la_fonction_qquechose;;
Ou peut etre est ce que je me trompe sur la signification de stack overflow puisque apparemment ca se produirait vers les tests les plus " compliqués " et donc ce serait un probleme de place dans les listes ( jsais pas si ya une limite :{ ) . Voila, c'est tout .

Merchi d'avance

Stack overflow = dépassement de la pile. La pile, c'est là entre autre où sont stockés les données manipulées (passées en paramètres par exemple) dans les fonctions récursives. Donc si ta fonction récursive s'appelle elle-même trop de fois, la pile n'est plus suffisante pour stocker ces différents appels et ce qui va avec, et tu obtiens une "stack overflow"

récursive terminale? qu'est ce donc? sinon j'ai pensé à un truc
ma fonction fait de n jusqu'a 0 qque chose, j'ai qu'a diviserle programme pour qu'il compare le resultat de la fonction en allant de n à n/ 2 avec le resultat de la fonction de n/2-1 à 0, non?

La récursion terminale, c'est (je ne connais pas l'OCaml) :

1
2
3
4
5
6
let ma_fonction a b =
  let c = a * b in
  if [ c >= 100000]
    c
  else
    ma_fonction a c

Il me semble que çà ressemble à çà.
En gros, c'est une fonction dont la récursion est la dernière opération. Elle sera automatiquement transformée par le compilateur en fonction itérative (avec une boucle).

Sinon, je n'ai pas compris le truc auquel tu penses.

serieux t'es genial pikrass, je connaissais pas cette recursivité terminale, et c'est super utile! en plus c'est facile à faire. Iteratif, j'ai pas cherché, je verrais plus tard

merci pour ton message lenoa , mais j'avais deja trouve la definition sur internet avant .Sinon, t'y etais preque, il manque juste le rec à cote de let

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.