Fonction récursive et algorithme
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
Manaus
- Membre Naturel
- Messages: 50
- Enregistré le: 26 Fév 2014, 19:44
-
par Manaus » 22 Avr 2014, 05:40
J'ai cette fonction récursive :
C(0) = 1
C(n+ 1) = ;) C(i). C(n - i)
Je dois calculer C(n) pour n ;) [1...5]
ensuite écrire un algorithme qui calcule C(n).
Je ne sais cependant pas du tout comment commencer pour calculer C(n) :mur:
Merci pour votre aide!!
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 22 Avr 2014, 08:29
Bonjour,
On te demande en fait de calculer C(1), C(2), C(3), C(4) et C(5)
Pour le premier il suffit de remplacer dans la formule :
 = \bigsum_{i = 0}^{0} C(i) C(0 - i) = C(0)C(0) = C(0)^2)
Pour C(2), même principe :
 = \bigsum_{i = 0}^{1} C(i) C(1 - i) = C(0)C(1) + C(1) C(0) = 2 C(0)C(1))
etc sachant que tu connais C(0)
-
Manaus
- Membre Naturel
- Messages: 50
- Enregistré le: 26 Fév 2014, 19:44
-
par Manaus » 22 Avr 2014, 16:24
ampholyte a écrit:Bonjour,
On te demande en fait de calculer C(1), C(2), C(3), C(4) et C(5)
Pour le premier il suffit de remplacer dans la formule :
 = \bigsum_{i = 0}^{0} C(i) C(0 - i) = C(0)C(0) = C(0)^2)
Pour C(2), même principe :
 = \bigsum_{i = 0}^{1} C(i) C(1 - i) = C(0)C(1) + C(1) C(0) = 2 C(0)C(1))
etc sachant que tu connais C(0)
Oh d'accord je vois! Je n'avais pas compris ça comme ça. Merci beaucoup :++:
As tu une idée pour l'algorithme?
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 22 Avr 2014, 16:28
Pour l'algorithme, il suffit d'appliquer ce que tu fais à la main.
Personnellement je verrais une double boucle :
- La première te permettant d'accéder à ton rang n et stockant le résultat de la seconde dans un tableau.
- La seconde te permettant de calculer pour chaque valeur de la boucle précédente, C(i) (donc jusqu'à ton C(n), ce que tu cherches).
-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 22 Avr 2014, 16:41
elo,
ou bien juste appliquer betement la formule donnée :
- Code: Tout sélectionner
procedure C(Entier n): Entier
si n = 0
retourner 1
finsi
Entier resultat = 0;
pour i=0 à n
Entier = Entier + C(i)*C(n-i)
finpour
retourner resultat
fin
c'est pas optimisé tout ca, mais c'est pas non plus demandé d'optimiser...
la vie est une fête

-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 22 Avr 2014, 16:44
fatal_error a écrit:elo,
ou bien juste appliquer betement la formule donnée :
- Code: Tout sélectionner
procedure C(Entier n): Entier
si n = 0
retourner 1
finsi
Entier resultat = 0;
pour i=0 à n
Entier = Entier + C(i)*C(n-i)
finpour
retourner resultat
fin
c'est pas optimisé tout ca, mais c'est pas non plus demandé d'optimiser...
Oui tout à fait, c'est vrai que la version récursif est sûrement plus visuelle, mais la version avec tableau est peut-être plus rapide (mais comme on ne cherche pas forcément une version optimisée ...).
Après vu le titre du sujet, je pense que ta solution est la plus pertinante =).
-
Manaus
- Membre Naturel
- Messages: 50
- Enregistré le: 26 Fév 2014, 19:44
-
par Manaus » 22 Avr 2014, 18:21
Merci beaucoup à vous deux!! fatal error je pense que la solution que tu me propose est très bien
-
Ben314
- Le Ben
- Messages: 21709
- Enregistré le: 11 Nov 2009, 21:53
-
par Ben314 » 22 Avr 2014, 19:44
Tel quel :
- Code: Tout sélectionner
procedure C(Entier n): Entier
si n = 0
retourner 1
finsi
Entier resultat = 0;
pour i=0 à n
Entier = Entier + C(i)*C(n-i)
finpour
retourner resultat
fin
j'ai un peu peur que ça boucle... un bon moment... vu que la fonction C(?) se réapelle elle même pour... la même valeur du paramètre (lorsque i=0 et i=n)
Manaus a pas précisé d'où à où il fallait faire la somme, mais un "somme de i=1 à n-1" semblerais plus plausible.
Ou alors c'est de 0 à n-1 et on fait le produit C(i)*C(n-1-i)
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 29 invités