From 9d23bdc8b79a1bf9cdc065260028c41eb4770636 Mon Sep 17 00:00:00 2001 From: Patrice Cadiot Date: Wed, 11 Sep 2019 17:26:35 +0200 Subject: [PATCH] add a new file in algo et structures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit iteratives vs recursive, où l'on propose de réécrire des méthodes données sous une forme sous l'autre forme --- recursive.vs.iterative.md | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 recursive.vs.iterative.md diff --git a/recursive.vs.iterative.md b/recursive.vs.iterative.md new file mode 100644 index 0000000..73c5129 --- /dev/null +++ b/recursive.vs.iterative.md @@ -0,0 +1,59 @@ +# Version Itérative versus Récursive + +### ci dessous vous allez trouver 5 méthodes, parfois en version récurvive, parfois itérative. +### A vous d'écrire la version manquante + +```ruby +# A tout seigneur, tout honneur, le classique factorielle, ici en mode iteratif +# A vous d'écrire la version récursive +def factorial(number) + raise ArgumentError, "number must be positive" if number < 0 + + (1..number).inject(1, &:*) +end + +# Un autre classique, fibonacci, ici en mode récursif, à vous de l'écrire en mode itératif +def fibonacci(number) + raise ArgumentError, "number must be positive" if number < 0 + + if number == 0 || number == 1 + number + else + fibonacci(number - 1) + fibonacci(number - 2) + end +end + +# une fonction itérative pour trouver le minimum d'un Array de nombres +# A vous d'écrire la version récursive +def find_min(element) + min = Float::INFINITY + element.each do |number| + min = number if number < min + end + min +end + + +# A vous d'écrire la version récursive de is_palindrome? +def is_palindrome?(word) + while word.length > 1 + return false if word[0] != word[-1] + word = word[1...-1] + end + true +end + + +# A vous d'écrire la version itérative de flatten, qui transforme un Array pouvant contenir des sous-Array, +# eux-mêmes pouvant contenir des Array, etc en un Array sans Array à l'intérieur +def flatten(deep_array) + deep_array.each_with_object([]) do |element, result| + if element.is_a? Array + result.concat flatten(element) + else + result << element + end + end +end + +``` \ No newline at end of file