Fibonacci (OCaml)

empty 14.09.03 12:41

Laskee fibonaccin lukujonon n:nnen jäsenen. Kieli: Objective Caml (www.ocaml.org).

 Tekstiversio  Arvo: 0 (0 ääntä)  Äänestä: +  -
(* Hidas tapa. Määritelmän läheinen. *)
let rec fib n =
  	match n with
  	  0 -> 1
  	| 1 -> 1
  	| _ -> fib (n - 2) + fib (n - 1);;

(* Nopea tapa. Lasketaan toisesta suunnasta. *)
let fib2 n =
  	if n < 2 then 1 else
  		let rec loop nnow nto n1 n2 =
  			if nnow >= nto then n1 + n2 else
  			loop (nnow + 1) nto (n2 + n1) n1 in
  		loop 2 n 1 1;;

stWasm1.0 10:56 25.10.04 
Objective Caml? En ole ikinä kuullut
ptman 17:53 5.10.05 
Hieno kieli. Opiskelemisen arvoinen. Laajentaa ajattelua, kuten esimerkiksi Lisp.
mylläri 20:15 22.1.07 
Hieman yksinkertaisemminkin voi tehdä. Muuttujan n näkyvyys on koko fib2:n määritelmä. Parin käyttö myös lienee selvempää.

(* Nopea tapa. Lasketaan toisesta suunnasta. *)
let fib2 n =
     if n < 2 then 1 else
        let rec loop count (n1, n2) =
           if count >= n then n1 + n2 else
           loop (count + 1) (n2 + n1, n1) in
        loop 2 (1, 1);;


Microsoftin F# on muuten melkein sama kieli kuin Objective Caml. Ja huomasin juuri vastaavani neljättä vuotta vanhaan postaukseen...