vault backup: 2023-09-29 14:33:01
This commit is contained in:
@ -476,3 +476,32 @@ let prime n =
|
||||
in (n = 2) || (n mod 2 = 1 and check n 3)
|
||||
```
|
||||
|
||||
## Hanoi
|
||||
```Ocaml
|
||||
(* displays moves: source -> destination *)
|
||||
|
||||
let move source destination =
|
||||
print_int source ;
|
||||
print_string " -> " ;
|
||||
print_int destination ;
|
||||
print_newline()
|
||||
;;
|
||||
|
||||
let hanoi n =
|
||||
let rec play n source auxiliary destination =
|
||||
if n = 1 then
|
||||
move source destination
|
||||
else
|
||||
begin
|
||||
play (n-1) source destination auxiliary;
|
||||
move source destination;
|
||||
play (n-1) auxiliary source destination
|
||||
end
|
||||
in
|
||||
if n < 0 then
|
||||
invalid_arg "Hanoi: number of disks invalid"
|
||||
else
|
||||
play n 1 2 3 (* Appel initial avec les piquets source, auxiliaire et destination *)
|
||||
;;
|
||||
hanoi 3;; (* Pour déplacer 3 disques de la tige 1 à la tige 3 *)
|
||||
```
|
||||
|
Reference in New Issue
Block a user