-module(ex02). -compile(export_all). %************************************** % calcul de la puissance d'un nombre % % Arguments : % - a : nombre % - n : puissance % % Resultat : % - a^n %**************************************/ puissance(A, 0) -> 1 ; puissance(A, N) when N > 0 -> puissance(A, N - 1) * A. %************************************** % Calcul du pgcd de a et b % % Arguments : % - a, b : nombres entiers % % Resultat : % - pgcd(a, b) %***************************************/ pgcd(A, 0) -> A ; pgcd(A, B) -> pgcd(B, A rem B). %************************************** % Calcul de la puissance d'un nombre % par la récursivité terminale % % Arguments : % - a : nombre % - n : puissance % - Accumulateur : accumulateur % % Resultat : % - a^n %**************************************/ puissanceTerminale(A, 0, Accumulateur) -> Accumulateur ; puissanceTerminale(A, N, Accumulateur) when N > 0 -> puissanceTerminale(A, N - 1, Accumulateur * A). %************************************** % calcul de la factorielle % % Argument : % - n : nombre % % Resultat : % - n! %**************************************/ factorielle(0) -> 1; factorielle(N) when N > 0 -> factorielle(N - 1) * N. %************************************** % Résolution des tours de Hanoi % % Arguments : % - n : nombre de disques du probleme % - A : pic initial % - B : pic intermediaire % - C : pic final % % Resultat : % list des mouvements (couple) %**************************************/ hanoi(0, A, B, C) -> [ { A, C } ]; hanoi(N, A, B, C) when N > 0 -> hanoi(N - 1, A, C, B) ++ [ { A, C } | hanoi(N - 1, B, A, C) ]. %************************************** % Calcul du temps de diffusion % % Arguments : % - n : nombre de particule à diffuser % - a : temps pour diffusion 1 particule sur le bord % % Resultat : % - temps total %**************************************/ diffusion(A, 0) -> 0; diffusion(A, N) when N > 0 -> diffusion(A, N - 1) + N * A. %************************************** % Calcul du nombre de région du plan % % Arguments : % - n : nombre de droite % % Resultat : % - nombre de region %**************************************/ region(0) -> 1; region(N) when N > 0 -> region(N - 1) + N.