diff --git a/fibonacci/code1.py b/fibonacci/code1.py new file mode 100644 index 0000000..725b276 --- /dev/null +++ b/fibonacci/code1.py @@ -0,0 +1,13 @@ +import numpy as np +def fibobo(n): + if n<= 1: + return n + return fibobo(n-1) + fibobo(n-2) + + +print(fibobo(30)) + +def fibibi(n): + fibi = np.array([[1,1],[1,0]]) + return np.linalg.matrix_power(fibi,n)[0][-1] +print(fibibi(100)) diff --git a/fibonacci/complex.py b/fibonacci/complex.py new file mode 100644 index 0000000..b0fa285 --- /dev/null +++ b/fibonacci/complex.py @@ -0,0 +1,62 @@ +import numpy as np +import time +import matplotlib.pyplot as plt +import math + +# Définir les fonctions +def fibobo(n): + if n <= 1: + return n + return fibobo(n - 1) + fibobo(n - 2) + +def fibibi(n): + fibi = np.array([[1, 1], [1, 0]]) + return np.linalg.matrix_power(fibi, n)[0][-1] + +# Benchmark des temps d'exécution +n_values_recursive = range(1, 35, 1) # Plage raisonnable pour fibobo (approche récursive) +n_values_matrix = range(1, 50, 1) # Limiter n pour éviter les dépassements avec 2^n + +# Temps pour fibobo +times_recursive = [] +for n in n_values_recursive: + start_time = time.time() + fibobo(n) + times_recursive.append(time.time() - start_time) + +# Temps pour fibibi +times_matrix = [] +for n in n_values_matrix: + start_time = time.time() + fibibi(n) + times_matrix.append(time.time() - start_time) + +# Calculer log(n) et 2^n pour comparaison +log_n = [math.log(n) for n in n_values_matrix] +exp_2_n = [2**n for n in n_values_matrix] + +# Graphique +plt.figure(figsize=(12, 8)) + +# Graphe des temps pour fibobo +plt.plot(n_values_recursive, times_recursive, label="fibobo (récursif)", marker='o') + +# Graphe des temps pour fibibi +plt.plot(n_values_matrix, times_matrix, label="fibibi (matriciel)", marker='s') + +# Ajouter log(n) pour comparaison simple +plt.plot(n_values_matrix, log_n, label="log(n)", linestyle="--") + +# Ajouter 2^n pour comparaison simple +plt.plot(n_values_matrix, exp_2_n, label="2^n", linestyle=":") + +# Ajuster l'échelle de l'axe y pour éviter les dépassements +plt.yscale('log') # Échelle logarithmique pour mieux visualiser les variations +plt.ylim(1e-6, 1e10) # Limiter les valeurs extrêmes + +plt.title("Comparaison des performances avec log(n) et 2^n") +plt.xlabel("Valeur de n") +plt.ylabel("Temps d'exécution ou croissance (échelle logarithmique)") +plt.legend(loc="upper left") +plt.grid() +plt.show() diff --git a/fibonacci/fibobo/Cargo.lock b/fibonacci/fibobo/Cargo.lock new file mode 100644 index 0000000..6db021a --- /dev/null +++ b/fibonacci/fibobo/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "fibobo" +version = "0.1.0" diff --git a/fibonacci/fibobo/Cargo.toml b/fibonacci/fibobo/Cargo.toml new file mode 100644 index 0000000..ea00447 --- /dev/null +++ b/fibonacci/fibobo/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "fibobo" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/fibonacci/fibobo/src/main.rs b/fibonacci/fibobo/src/main.rs new file mode 100644 index 0000000..e88a62c --- /dev/null +++ b/fibonacci/fibobo/src/main.rs @@ -0,0 +1,12 @@ +fn main() { + println!("Hello, world!"); + let f = fibobo(30); + println!("{f}"); +} + +fn fibobo(n: u64) -> u64 { + if n <= 1 { + return n; + } + return fibobo(n - 1) + fibobo(n - 2); +}