• Aucun résultat trouvé

# La récursivité EST terminale !1

N/A
N/A
Protected

Academic year: 2022

Partager "# La récursivité EST terminale !1"

Copied!
3
0
0

Texte intégral

(1)

# ============================================= #

# ============================================= #

# IPT MATHS SPE #

# Récursivité Partie I (Séance IV de 2017-2018) #

# Algorithmes/codes du cours #

# Octobre 2017 #

# ============================================= #

# ============================================= #

import sys

sys.setrecursionlimit(2000)

# ============== #

# ============== #

# La factorielle #

# ============== #

# ============== #

## Programme itératif

def fact_iter(n):

if type(n) != int:

raise TypeError('Vous devez fournir un entier !') elif n < 0:

raise ValueError('Vous devez fournir un entier naturel !') else:

F = 1

for i in range(1,n+1):

F *= i return(F)

## Programme récursif

# La récursivité N'EST PAS terminale !

def fact_rec(n):

if n != 0:

return(n*fact_rec(n-1)) else:

return(1)

# ====================================== #

# ====================================== #

# PGCD de deux entiers naturels #

# #

# Remarque : les codes ci-dessous ne #

# tiennent pas compte de la #

# de la situation a=0 et b=0. #

# ====================================== #

# ====================================== #

## Programme itératif

def pgcd_iter(a,b):

while b!= 0:

a,b = b,a%b return(a)

## Programme récursif

# La récursivité EST terminale !

1

(2)

def pgcd_rec(a,b):

if b == 0:

return(a) else:

return(pgcd_rec(b,a%b))

# ======================== #

# ======================== #

# Evaluation d'un polynôme #

# Méthode de HORNER #

# ======================== #

# ======================== #

# Remarque : Le polynôme est fourni sous la forme d'une liste P où TOUS LES

# COEFFICIENTS apparaissent : P[0] est le coefficient constant P[i] est le

# coefficient de X^i.

## Programme "classique" (ce n'est pas du Horner !!!)

# Calcul basique où on évalue les monômes successivement...

def EvalPoly(P,x):

n = len(P) res = 0

for i in range(n):

res += P[i]*x**i return(res)

print(EvalPoly(P,2)) print(EvalPoly(P,-1))

## Programme récursif (ce n'est pas non plus du Horner !!!)

# Avec ce programme, la liste P n'est pas altérée MAIS la récursivité N'EST

# PAS TERMINALE !

# ATTENTION : cette version, bien que récursive, NE CORRESPOND PAS à la

# méthode de Horner !

def horner_rec1(P,x):

if len(P) == 1:

return(P[0]) else:

return(P[0] + horner_rec1(P[1:],x)*x)

print(horner_rec1(P,2)) print(horner_rec1(P,-1))

## Méthode de Horner (version itérative)

def horner_iter(P,x):

n = len(P) c_new = P[-1]

for i in range(n-2,-1,-1):

c_new = c_new*x + P[i]

return(c_new)

print(horner_iter(P,2)) print(horner_iter(P,-1))

## Méthode de Horner (version récursive)

2

(3)

# Avec ce programme, la liste P n'est pas altérée ET la récursivité est

# terminale !

def horner_rec2(P,x):

if len(P) == 1:

return(P[0]) else:

return(horner_rec2(P[:-2] + [P[-2] + P[-1]*x],x))

## Pour tester

# Le polynôme de votre choix !

P = [1,1,1,-2,3]print(horner_rec2(P,2)) print(horner_rec2(P,-1))

3

Références

Documents relatifs

Il est rare qu'un programmeur doive écrire lui-même une fonction récursive... Sinon, la partie

La complexité spatiale de la fonction fact est donc non linéaire, même si on considère que les entiers inférieurs ou égaux à l’argument initial ont tous la même taille

Au dos de l’annexe 1 : Rédigez un algorithme sous forme de commentaires qui permettrait de placer un maximum de photos sur une page tout en utilisant tous les formats d’images

Une suite définie à l’aide de son premier terme et d’une relation entre des termes consécutifs est appelée « suite récursive ».. On dit d’une telle suite qu’elle est

La Pile d’exécution (call stack) du programme en cours est un emplacement mémoire destiner à mémoriser les paramètres, les variables locales ainsi que l’adresse de retour de

La Pile d’exécution du programme en cours est un emplacement mémoire destiner à mémoriser les paramètres, les variables locales ainsi que les adresses de retour des fonctions en

En vous basant sur la première relation de récurrence donnée, implantez en java une fonction itérative calculant efficacement C n p en utilisant un tableau à une dimension..

Ce programme itératif ressemble à celui que nous avons d'abord construit en ce que les caractères de l'inverse sont bien concaténés en tête de z, mais ils sont retirés au fur et