• Aucun résultat trouvé

Fonctions et r´ ecursivit´ e II

N/A
N/A
Protected

Academic year: 2021

Partager "Fonctions et r´ ecursivit´ e II"

Copied!
4
0
0

Texte intégral

(1)

Pierre-Louis CAYREL 2008-2009

Pr´epa HEC 2 disponible surwww.cayrel.net

Lyc´ee Lavoisier Feuille n6

Fonctions et r´ ecursivit´ e II

Exercice 1 Une suite (un)n∈N est dite lin´eaire double si elle d´efinie par la connaissance de ses deux premiers termes et par une relation de r´ecurrence du type :

un+2 =aun+1+bun.

Posons u0 = 1 et u1 = 1. Apr`es avoir choisit une valeur de n, correspondant au nombre de termes de la suite `a calculer, ´ecrire un programme r´ecursif qui calcule et affiche les n premiers termes.

Exercice 2 (Suite de Fibonacci) On consid`ere la suite d´efinie ainsi : U0 = 1

U1 = 1

Un=Un−1+Un−2

Ecrire les deux fonctions´ fibo_rec et fibo_iter qui prennent toutes les deux en entr´ee un entier n et rendent en sortie la valeur du n-i`eme terme de la suite ; la premi`ere proc´edant de mani`ere r´ecursive, la seconde de mani`ere it´erative.

Exercice 3 Ecrire une fonction qui rende la valeur de´ nk

sans utiliser cette fois-ci la fonction factorielle, mais `a partir de la relation :

n

k

=

n−1

k−1

+

n−1

k

En remarquant bien que :

– n doit ˆetre sup´erieur ou ´egal `ak;

n0

= 1;

kk

= 1.

Exercice 4 Ecrire un programme qui :´

– initialiser le polynˆome dividende (de degr´e inf´erieur ou ´egal `a n) ;

– initialiser le polynˆome diviseur (de degr´e inf´erieur au degr´e du dividende) ; – rendre le polynˆome quotient et le polynˆome reste.

1

(2)

Pierre-Louis CAYREL 2008-2009

Pr´epa HEC 2 disponible surwww.cayrel.net

Lyc´ee Lavoisier Feuille n6

Fonctions et r´ ecursivit´ e II

Correction 1

PROGRAM suite_lineaire_double;

VAR n,k : integer;

FUNCTION U(n : integer) : real;

Begin

if (n = 0) or (n = 1) then U := 1;

else U := a * U(n-1) + b * U(n-2);

end;

Begin

writeln(’donner les valeurs de a et b’);

readln(a,b);

writeln(’donner le nombre de termes d´esira n’);

read(n);

for k := 0 to n

do writeln(’U(’,k,’)=’,U(k));

readln End.

Correction 2

FUNCTION fibo_rec(n : integer) : integer;

begin

if (n = 0) or (n = 1) then fibo_rec := 1

else fibo_rec := fibo_rec(n-1) + fibo_rec(n-2) end;

et

FUNCTION fibo_iter(n : integer) : integer;

VAR rang_moins_1, rang_moins_2, terme : longint;

i : integer;

begin

rang_moins_1 := 1;

rang_moins_2 := 1;

1

(3)

for i := 2 to n do

begin

terme := rang_moins_1 + rang_moins_2;

rang_moins_1 := terme;

rang_moins_2 := rang_moins_1;

end;

fibo_iter := terme;

end;

Correction 3

FUNCTION combi(n,k : integer) : integer;

Begin

if n > k

then if k = 0

then combi := 1

else combi := combi(n-1,k-1) + combi(n-1,k) else if n = k

then combi := 1

else writeln(’erreur dans le choix de vos coefficients’);

end;

Correction 4

Program division_poly;

const n=10;

type tpoly = array[0..n+1] of real;

var polynome, dividende, quotient, diviseur, reste : tpoly;

i : integer;

function degre(p : tpoly) : integer;

Begin

degre := trunc(p[0]) End;

procedure initialisation(var p : tpoly);

var k : integer;

Begin

writeln(’quel est le degr´e du polyn^ome’);

readln(k);

p[0] := k;

for k := 1 to degre(p) + 1 do

Begin

writeln(’quel est e terme de degr´e’,k-1);

readln(p[k]);

2

(4)

end;

end;

procedure recitation(p : tpoly);

var k : integer;

Begin

for k := 1 to degre(p)+1 do write(p[k],’’);

writeln;

end;

procedure division(var p,q : tpoly; d : tpoly);

var i : integer;

Begin

if degre(p) >= degre(d) then

Begin

q[degre(p) - degre(d) + 1] := p[degre(p) + 1] / d[degre(d) + 1];

for i := degre(d) + 1 downto 1 do

p[degre(p) - degre(d) + i] := p[degre(p) - degre(d) + i]

- q[degre(p) - degre(d) + 1] * d[i];

p[0] := p[0] - 1;

division(p,q,d);

end;

end;

Begin

initialisation(polynome);

initialisation(diviseur);

dividende:= polynome;

quotient[0] := (degre(polynome) - degre(diviseur))/1;

writeln(’le degre du quotient est’, degre(quotient));

division(dividende, quotient, diviseur);

writeln(’polynome ’);recitation(polynome);

writeln(’diviseur ’);recitation(diviseur);

writeln(’quotient ’);recitation(quotient);

writeln(’reste ’);recitation(reste);

readln end.

3

Références

Documents relatifs

En d´ eduire une fonction qui teste si deux tableaux d’entiers contiennent les mˆ emes ´ el´ elments, sans tenir compte de l’ordre dans lequel les ´ el´ ements sont

Ecrire le d´ ´ efinition d’une fonction r´ ecursive qui renvoie vrai/f aux selon qu’une valeur donn´ ee se trouve ou non dans un tableau

Nous voulons maintenant un algorithme Union(A, B) qui nous renvoie l’union des deux ensembles qui lui sont pass´ es en argument.. (a) Cas des ensembles non tri´ es

L’algorithme Intersection est appel´ e longueur (B) fois, chacun de ces appels effectuant un appel ` a Recherche sur A, dont le coˆ ut au pire est en longueur(A)?. Quelle est

On admettra comme op´eration ´el´ementaire une op´eration arithm´etique, une affectation, une comparaison (´evaluation d’une expression bool´eenne), l’affichage d’un

admettra comme op´eration ´el´ementaire une op´eration arithm´etique, une affectation, une comparaison (´evaluation d’une expression bool´eenne), l’affichage d’un

[r]

Est-il possible de r´ esoudre le probl` eme ` a l’aide de la r´ esolution du probl` eme portant sur une (des) ”plus petite(s)” valeur(s) du param` etre. Si oui,