diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 3421ffb..bbe00b4 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,7 +13,7 @@ "state": { "type": "markdown", "state": { - "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", + "file": "Algo/Séminaire/Exercices seminaire.md", "mode": "source", "source": false } @@ -85,7 +85,7 @@ "state": { "type": "backlink", "state": { - "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", + "file": "Algo/Séminaire/Exercices seminaire.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,7 +102,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "Algo/Séminaire/Chapter 5 - Recursivity.md", + "file": "Algo/Séminaire/Exercices seminaire.md", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -125,7 +125,7 @@ "state": { "type": "outline", "state": { - "file": "Algo/Séminaire/Chapter 5 - Recursivity.md" + "file": "Algo/Séminaire/Exercices seminaire.md" } } }, @@ -158,19 +158,19 @@ }, "active": "0d2d422aa24bb900", "lastOpenFiles": [ - "Algo/Séminaire/Chapter 4 - A bit of imperative.md", - "Algo/Séminaire/Chapter 3 - Case analysis.md", + "Algo/Séminaire/Introduction.md", "Algo/Séminaire/Chapter 2 - Functions.md", - "Algo/Séminaire/Chapter 1 - CAML basics.md", + "Algo/Séminaire/Chapter 3 - Case analysis.md", + "Algo/Séminaire/Exercices seminaire.md", "Algo/Séminaire/Chapter 5 - Recursivity.md", + "Algo/Séminaire/Chapter 4 - A bit of imperative.md", + "Algo/Séminaire/Chapter 1 - CAML basics.md", "Algo/Séminaire/assets/exception-meme.png", "Algo/Séminaire/assets/filter-meme.png", "Algo/Séminaire/assets/if-meme.png", - "Algo/Séminaire/Exercices seminaire.md", "Algo/Séminaire/assets/basics-meme.png", "Algo/Séminaire/assets/functions-meme.jpg", "Algo/Séminaire/assets/unitaire-meme.png", - "Algo/Séminaire/Introduction.md", "Algo/Séminaire/assets/fact function response.png", "Algo/Séminaire/assets/recursivite-meme.png", "Pasted image 20230912155138.png", diff --git a/Algo/Séminaire/Exercices seminaire.md b/Algo/Séminaire/Exercices seminaire.md index 35ba844..8390611 100644 --- a/Algo/Séminaire/Exercices seminaire.md +++ b/Algo/Séminaire/Exercices seminaire.md @@ -305,3 +305,40 @@ let rec quo a b = else 1 + quo (a-b) b ;; ``` + +## Exercise 4.9 +```Ocaml +let rec reverse n = + let str_n = string_of_int n in + let len = String.length str_n in + let rec reverse_helper index = + if index < 0 then + "" + else + String.make 1 str_n.[index] ^ reverse_helper (index - 1) + in + reverse_helper (len - 1) ;; + +let rec reverse_int n = + let rec reverse_helper acc remaining = + if remaining = 0 then + acc + else + let last_digit = remaining mod 10 in + let new_acc = acc * 10 + last_digit in + let new_remaining = remaining / 10 + in reverse_helper new_acc new_remaining in reverse_helper 0 n ;; + +``` + +## Exercise 4.10 + +```Ocaml +let rec multiply x y = + if x = 0 || y = 0 then + 0 + else if x mod 2 = 0 then + multiply (x / 2) (y * 2) + else + y + multiply (x / 2) (y * 2) +```