Voila je me demandais comment fait-on pour déclarer une fonction comme dans le C...
J'en aurais besoin car je veux faire un programme sur la fonction d'ackermann, une fonction recursive qui s'écrit comme cela en C:
int ackermann(m,n)
if n==0 then
return m+1
elseif m==0 then
return ackermann(n-1,1)
else
return ackermann(n-1,ackermann(n,m-1))
merci !!!
Autorisation : Membre
Nb de messages : 240
Inscrit le : Mer 17 Jui 2009, 0:54
Posté le : Mer 09 Déc 2009, 17:40
non en C ta variable est une variable normale jcrois ( il y a différent type float pour les reels int les entiers ... )
Pour moi sont programme resemblerais a :
Code
Input "M Un entier",M
Input "N Un entier",N
If partDéc(M) != 0 ou partDéc(N) !=0
Then
Disp "M OU N NON-ENTIER
Stop
End
If M=0
Disp "A(m,n)=",N+1
If M>0 et N=0
Disp "A(M,N)=A(M-1,1)
If M>0 et N>0
Disp "A(M,N)=","A(M-1,A(M,N-1))
Pasdepsedo Invité
Posté le : Mer 09 Déc 2009, 22:16
En fait c'est une fonction assez compliquée...
C'est une fonction à deux variables, des entiers positifs.
Elle est dite récursive car on doit l'utiliser a plusieurs reprises pour trouver la solution...
Exemple:
f(0,1) = 2 (par definition si m=0 alors la solution est n+1)
f(1,0) = f(0,1) = 2 (la encore par définition si n=0 f(m,n) = f(m-1,1) )
Maintenant un peu plus compliqué:
f(1,1) = f(0, f(1, 0)) (selon la troisieme règle) = f(0,2) = 3 (selon la 1ere regle...)
Maintenant beaucoup plus chaud:
f(2,2) = f(1, f(2, 1)) = f(1, f(1, f(2, 0))) = f(1, f(1, f(1,1))) = f(1, f(1, 3)) = f(1, f(0, f(1,2)))
= f(1, f(0, f(0, f(1,1)))) = f(1, f(0, f(0, 3))) = f(1, f(0, 4)) = f(1, 5) = f(0, f(1, 4))
= f(0, f(0, f(1,3))) = f(0, f(0, f(0, f(1, 2)))) = f(0, f(0, f(0, f(0, f(1,1))))) =
f(0, f(0, f(0, f(0, 3)))) = f(0, f(0, f(0, 4))) = f(0, f(0, 5)) = f(0,6) = 7 (ouf !!!)
Bravo a ceux qui ont tout suivi et encore plus a ceux qui ont tout compris...
Vous comprenez maintenant le terme de fonction recursive...
Pour culture le nombre f(3,3) est incalculable pour un humain sans se gourer quelque part, et
le nombre f(10,10) est tellement grand qu'il est impossible à écrire sous forme exacte sur du papier...
Utile si vous voulez impressionner votre prof de math à partir de la seconde... (au college personne ne pige et même les profs ne la connaissent peut-etre pas (ca dépend de certains))
Donc pour revenir a ma question si quelqu'un connait le C est ce que l'on peut établir une fonction en langage TI ? Cela m'etonnerai beaucoup que l'on puisse programmer cette fonction seulement avec de lbl et des boucles...
Autorisation : Membre
Nb de messages : 240
Inscrit le : Mer 17 Jui 2009, 0:54
Posté le : Jeu 10 Déc 2009, 22:17
Hum ...
Jpense que c'est possible mais qu'il faudra :
De la mémoire
Des piles
De la patiente
...
Il faudrait déjà poser M et N <10 sinon on sera vite en dehors de la capaciter de la calculette
Je me penche dessus samedi
Pasdepsedo Invité
Posté le : Jeu 10 Déc 2009, 23:33
Oui mais surtout m < 5 : c'est m qui rend la fonction exponantielle. Sinon f(10,10) pour donner un ordre d'idee si on voulait le mettre sur un fichier texte il faudrait 10^(factorielle du nombre d'atomes dans l'univers) Teraoctets... Le truc impossible quoi...
En fait l'avantage dans le C pour ceux qui ne connAissent pas c'est qu'on peut en très peu de lignes rédiger une fonction que l'on peut réutiliser plusieurs fois sans avoir à la réecrire...
On doit d'abord définir la fonction:
int f(m,n) -- on crée la fonction
if m=0 -- on énonce les règles
return n+1 -- return est le nombre qui va etre "renvoyé" dans une variable en fonction des paramètres de la
fonction
elseif n=0
return f(m-1, 1) -- on demande si n=0 de remonter en haut de la fonction en remplacant m par m-1 et n par 1
else
return f(0,f(m,n-1) -- meme chose
En C on utilise une fonction comme ceci:
int variable = f(2,2)
les nombres 2,2 vont passer plusieurs fois à la machine à laver jusqu'a ce que l'on tombe sur un entier, (ici 7) qui sera mis dans la variable par un "return"
En fait je me demandais si ce "raccourci" n'existe pas en TI Basic...
Autorisation : Membre
Nb de messages : 655
Inscrit le : Dim 13 Sep 2009, 8:27
Posté le : Ven 11 Déc 2009, 23:05
Voilà :
Code
Prompt M
Prompt N
1->A
A->dim(Liste 1
For(B,1,9^99
If M=0:Then
N+1->N
A-1->A
If A<1:Goto F
Liste 1(A)->M
Else
If N=0:Then
M-1->M
1->N
Else
M-1->Liste 1(A
A+1->A
N-1->N
End
End
End
Lbl F
Disp N
Autorisation : Membre
Nb de messages : 200
Inscrit le : Mar 20 Oct 2009, 18:58
Posté le : Sam 12 Déc 2009, 8:43
Et beh, si ça marche vraiment bien un grand bravo sypotu !!!
(Moi perso j'avais absolument rien pigé à sa demande xDDD !)
Pasdepsedo Invité
Posté le : Sam 12 Déc 2009, 21:35
Merci beaucoup ! J'ai été un peu rebuté au début devant l'apparante complexité de la fonction mais finalement ca tiens en peu de lignes... Si j'ai bien compris A c'est le nombre de "fonctions imbriquées" les unes dans les autres et la liste stocke les nombres qui correspondent au différentes imbrications ?
genre f=(0,f(1,f(1,2)
Si j'ai bien compris A vaut 3 et la liste contient: 0,1,1 et N vaut 2...