diff --git a/tracing-recursion.py b/tracing-recursion.py new file mode 100644 index 0000000000000000000000000000000000000000..4be8cdc90661feaf434f0fc5d5d1917eb5d69e53 --- /dev/null +++ b/tracing-recursion.py @@ -0,0 +1,324 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +#gantchou koffi +#mi13 +#30/01 +from ap_decorators import trace +#Somme: +@trace + +def somme(a: int, b: int) -> int: + """ + Renvoie la somme de deux nombres a et b. + """ + if b == 0: + return a + else: + return somme(a + 1, b - 1) +# somme(10,12) +# -> somme((10, 12), {}) +# ... -> somme((11, 11), {}) +# ...... -> somme((12, 10), {}) +# ......... -> somme((13, 9), {}) +# ............ -> somme((14, 8), {}) +# ............... -> somme((15, 7), {}) +# .................. -> somme((16, 6), {}) +# ..................... -> somme((17, 5), {}) +# ........................ -> somme((18, 4), {}) +# ........................... -> somme((19, 3), {}) +# .............................. -> somme((20, 2), {}) +# ................................. -> somme((21, 1), {}) +# .................................... -> somme((22, 0), {}) +# .................................... <- 22 +# ................................. <- 22 +# .............................. <- 22 +# ........................... <- 22 +# ........................ <- 22 +# ..................... <- 22 +# .................. <- 22 +# ............... <- 22 +# ............ <- 22 +# ......... <- 22 +# ...... <- 22 +# ... <- 22 +# <- 22 +# 22 + + +#Binomial: +@trace +def binomial(n: int, r: int) -> int: + """ + Renvoie le coefficient binomial nCr. + """ + if n == 1 and r == 1: + return 1 + elif r==0: + return 1 + elif n==0: + return n + + else: + return binomial(n - 1, r - 1) + binomial(n - 1, r) +# binomial(6,5) +# -> binomial((6, 5), {}) +# ... -> binomial((5, 4), {}) +# ...... -> binomial((4, 3), {}) +# ......... -> binomial((3, 2), {}) +# ............ -> binomial((2, 1), {}) +# ............... -> binomial((1, 0), {}) +# ............... <- 1 +# ............... -> binomial((1, 1), {}) +# ............... <- 1 +# ............ <- 2 +# ............ -> binomial((2, 2), {}) +# ............... -> binomial((1, 1), {}) +# ............... <- 1 +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 1 +# ......... <- 3 +# ......... -> binomial((3, 3), {}) +# ............ -> binomial((2, 2), {}) +# ............... -> binomial((1, 1), {}) +# ............... <- 1 +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 1 +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 1 +# ...... <- 4 +# ...... -> binomial((4, 4), {}) +# ......... -> binomial((3, 3), {}) +# ............ -> binomial((2, 2), {}) +# ............... -> binomial((1, 1), {}) +# ............... <- 1 +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 1 +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 1 +# ......... -> binomial((3, 4), {}) +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ............ -> binomial((2, 4), {}) +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 4), {}) +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 0 +# ...... <- 1 +# ... <- 5 +# ... -> binomial((5, 5), {}) +# ...... -> binomial((4, 4), {}) +# ......... -> binomial((3, 3), {}) +# ............ -> binomial((2, 2), {}) +# ............... -> binomial((1, 1), {}) +# ............... <- 1 +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 1 +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 1 +# ......... -> binomial((3, 4), {}) +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ............ -> binomial((2, 4), {}) +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 4), {}) +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 0 +# ...... <- 1 +# ...... -> binomial((4, 5), {}) +# ......... -> binomial((3, 4), {}) +# ............ -> binomial((2, 3), {}) +# ............... -> binomial((1, 2), {}) +# .................. -> binomial((0, 1), {}) +# .................. <- 0 +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ............ -> binomial((2, 4), {}) +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 4), {}) +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 0 +# ......... -> binomial((3, 5), {}) +# ............ -> binomial((2, 4), {}) +# ............... -> binomial((1, 3), {}) +# .................. -> binomial((0, 2), {}) +# .................. <- 0 +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 4), {}) +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ............ -> binomial((2, 5), {}) +# ............... -> binomial((1, 4), {}) +# .................. -> binomial((0, 3), {}) +# .................. <- 0 +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# ............... <- 0 +# ............... -> binomial((1, 5), {}) +# .................. -> binomial((0, 4), {}) +# .................. <- 0 +# .................. -> binomial((0, 5), {}) +# .................. <- 0 +# ............... <- 0 +# ............ <- 0 +# ......... <- 0 +# ...... <- 0 +# ... <- 1 +# <- 6 +# 6 + + +#Palindrome: +@trace +def is_palindromic(s: str) -> bool: + """ + Vérifie si une chaîne de caractères est un palindrome. + """ + if len(s) <= 1: + return True + if s[0] != s[-1]: + return False + return is_palindromic(s[1:-1]) + +# is_palindromic('ressasser') +# -> is_palindromic(('ressasser',), {}) +# ... -> is_palindromic(('essasse',), {}) +# ...... -> is_palindromic(('ssass',), {}) +# ......... -> is_palindromic(('sas',), {}) +# ............ -> is_palindromic(('a',), {}) +# ............ <- True +# ......... <- True +# ...... <- True +# ... <- True +# <- True +# True +# is_palindromic('ketib') +# -> is_palindromic(('ketib',), {}) +# <- False +# False