Comment contourner la récursivité ?
Bonsoir,
Si vous êtes un(e) habitué(e) du forum alors vous le savez déjà, en Tunisie, on enseigne la section Sciences de l'Informatique pour la première année. Et parmi les malheurs de la "mésaventure", la récursivité.
On nous demande de récursifier à tort et à travers, toutes les procédures qu'on trouve. C'est très énervant ! Pour le calcul d'une factorielle, ça passe mais quand c'est pour un tri à bulles, on se demande si on a vraiment trouvé, puisqu'en réalité, la version récursive de ce tri, proposée par les enseignants, contient une boucle pour (for en Pascal). Ceci est un détail, rentrons dans le sujet.
J'ai un test demain matin et j'ai envie de contourner toutes les questions demandant une solution récursive en donnant une solution itérative qui a l'air d'être récursive. Voilà mon idée :
Code:
1 2 3 4 5 6 7
| procédure la_proc_rec(p1:type1; p2:type2.... faire:chaîne)
si faire<>rien alors
TRAITEMENT;
TRAITEMENT;
TRAITEMENT;
la_proc_rec(p1,p2,....,"rien");
fin si |
Voici un exemple moins abstrait, notamment sur une fonction qui remplit un tableau par n entiers:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| procedure remplir(var T:tab; n:integer; faire:string);
begin
if faire<>'rien' then
begin
for i:=1 to n do
begin
write('remplir la case ',i,' ');
readln(T[i]);
end;
remplir(t,5912,'rien'); {remplir(.....), c'est pour en faire une procédure récursive}
{ici 5912 c'est pour rigoler car on peut mettre n'importe quoi}
end;
end; |
Je vous demande de me donner vos avis.
Merci!