cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 2010
-
17 août 2006 à 14:03
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 2010
-
23 août 2006 à 19:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 23 août 2006 à 19:29
Francky: oui je sais, c'est juste que je ne voulais pas surcharger le code avec des vérifications supplémentaires ;-)
Barbichette: Effectivement, d'ailleurs il existe une expression directe en fonction de n de la suite de Fibonacci (qui d'ailleurs fait aussi intervenir le nombre d'or à la puissance n). Ce qui est étonnant avec celle-ci (la mienne), c'est que finallement on fait seulement des soustractions successives pour trouver le résultat, et que l'expression directe en fonction de n fasse intervenir la partie entière d'un irrationnel. En particulier, cette suite permet d'avoir la n-ième décimale du nombre d'or: par exemple le dernier chiffre de u(9) est la 1ère décimale, celui de u(9999) la 4ème, etc...
cs_barbichette
Messages postés220Date d'inscriptionlundi 30 octobre 2000StatutMembreDernière intervention15 juillet 2013 23 août 2006 à 12:30
salut a tous...
bon, pour ouvrir une parenthèse sur le nombre d'or,
on l'obtient aussi avec la suite de Fibonnachi. (La suite u(n)=u(n-1)+u(n-2) avec u(0)=1 et u(1)=1)
Et bien la suite v(n)=u(n)/u(n-1) tend vers le nombre d'or...
voilà, c'était ma petit contribution pour la fin des vacances...
Barbichette
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 22 août 2006 à 17:07
Salut Foman
Source rigolote mais je penses qu'il y a 2 beugs : si tu prends n=500 par exemple l'application ne retourne aucun résultat. En prenant un entier négatif, l'application se fige. Ce n'est pas grand chose
Oui, la dérécursivation en effet.
Remarque que cette méthode n'augmente pas forcément les performances (dans ce cas là si), c'est pour cela que je ne l'ai pas citée. Mais bon, sur des procédures récursives un peu plus complexe, je préfère largement les laisser "tel quel" car la dérécursivation rend le code nettement mons lisible et compréhensible
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 17 août 2006 à 16:31
Non, ce n'est pas moi qui l'ai "trouvée", je l'ai juste vue une fois dans un exo de maths sur la récurrence, mais j'ai trouvé l'expression en fonction de n tout seul (en calculant u(10000), je me suis rendu compte que ça me rappelait un nombre que j'avais déjà vu...). Ceci dit, c'est pas ça qui va révolutionner les maths!
Au niveau optimisation, on pourrait "dérécursifier" la suite en utilisant un stockage des valeurs intermédiaires:
var
T:array[0..10000] of Integer;
n:Integer;
begin
T[0]:=0;
for n:=1 to High(T) do
T[n]:=n-T[T[n-1]];
end;
Ca permet de ne pas utiliser la pile d'appels récursifs, et ça va infiniment plus vite!
23 août 2006 à 19:29
Barbichette: Effectivement, d'ailleurs il existe une expression directe en fonction de n de la suite de Fibonacci (qui d'ailleurs fait aussi intervenir le nombre d'or à la puissance n). Ce qui est étonnant avec celle-ci (la mienne), c'est que finallement on fait seulement des soustractions successives pour trouver le résultat, et que l'expression directe en fonction de n fasse intervenir la partie entière d'un irrationnel. En particulier, cette suite permet d'avoir la n-ième décimale du nombre d'or: par exemple le dernier chiffre de u(9) est la 1ère décimale, celui de u(9999) la 4ème, etc...
23 août 2006 à 12:30
bon, pour ouvrir une parenthèse sur le nombre d'or,
on l'obtient aussi avec la suite de Fibonnachi. (La suite u(n)=u(n-1)+u(n-2) avec u(0)=1 et u(1)=1)
Et bien la suite v(n)=u(n)/u(n-1) tend vers le nombre d'or...
voilà, c'était ma petit contribution pour la fin des vacances...
Barbichette
22 août 2006 à 17:07
Source rigolote mais je penses qu'il y a 2 beugs : si tu prends n=500 par exemple l'application ne retourne aucun résultat. En prenant un entier négatif, l'application se fige. Ce n'est pas grand chose
PDF : Merci pour la démo ;).
17 août 2006 à 17:39
Remarque que cette méthode n'augmente pas forcément les performances (dans ce cas là si), c'est pour cela que je ne l'ai pas citée. Mais bon, sur des procédures récursives un peu plus complexe, je préfère largement les laisser "tel quel" car la dérécursivation rend le code nettement mons lisible et compréhensible
17 août 2006 à 16:31
Au niveau optimisation, on pourrait "dérécursifier" la suite en utilisant un stockage des valeurs intermédiaires:
var
T:array[0..10000] of Integer;
n:Integer;
begin
T[0]:=0;
for n:=1 to High(T) do
T[n]:=n-T[T[n-1]];
end;
Ca permet de ne pas utiliser la pile d'appels récursifs, et ça va infiniment plus vite!
17 août 2006 à 15:47
Et cette fois, il n'y a rien à optimiser :-(
Ceci dit, c'est un bon travail.
Si c'est toi qui a trouvé cette suite , alors bravo !
A+
17 août 2006 à 14:03