From: Michel Quercia <quercia@cal.enst.fr>
To: caml-list@inria.fr
Subject: Re: help an o'caml beginner
Date: Thu, 27 Jul 2000 23:47:42 +0000 [thread overview]
Message-ID: <0007280005260B.23279@haguenauer> (raw)
In-Reply-To: <20000726115152.A6102@yukari.lineo.com>
Le Wed, 26 Jul 2000, John BEPPU a écrit :
> I tried out the recursive fibonacci number program
> ...
> Next, I tried to fumble my way through making an O'Caml version of
> this iterative algorithm, but I failed due to my lack of knowledge
> about this language.
Below are three translations of your iterative C code :
------------------------------------------------------------
(* iterative Caml code *)
let fib(n) =
let a = ref(1) and b = ref(1) in
for i=2 to n do
let x = !a + !b in
a := !b;
b := x
done;
!b
;;
-------------------------------------------------------------
(* recursive Caml code, fib2(n) returns (fib(n-1),fib(n)) *)
let rec fib2(n) =
if n <= 1 then (n,1)
else let (a,b) = fib2(n-1) in (b,a+b)
;;
let fib(n) = let (_,x) = fib2(n) in x;;
-------------------------------------------------------------
(* tail-recursive Caml code, fib3 a b n computes a*fib(n) + b*fib(n-1) *)
let rec fib3 a b n = if n <= 1 then a + b*n else fib3 (a+b) a (n-1);;
let fib(n) = fib3 1 0 n;;
--------------------------------------------------------
Note that there are also divide-and-conquer algorithms for computing Fibonacci
numbers that achieve logarithmic computing time with respect to the input.
> I wish the tutorial were available in HTML.
There is atutorial included in the html documentation.
Regards,
--
Michel Quercia
23 rue de Montchapet, 21000 Dijon
http://pauillac.inria.fr/~quercia
mailto:quercia@cal.enst.fr
next prev parent reply other threads:[~2000-07-28 0:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-07-26 17:51 John BEPPU
2000-07-27 18:47 ` Alain Frisch
2000-07-27 18:56 ` Markus Mottl
2000-07-29 17:03 ` John BEPPU
2000-07-29 17:23 ` Markus Mottl
2000-07-31 7:11 ` Vitaly Lugovsky
2000-07-31 8:43 ` Markus Mottl
2000-08-02 16:58 ` Printable Caml manual Walid Taha
2000-07-27 18:57 ` help an o'caml beginner Remi VANICAT
2000-07-27 19:08 ` Jean-Christophe Filliatre
2000-07-27 21:31 ` Laurent Chéno
2000-07-27 23:47 ` Michel Quercia [this message]
2000-07-27 18:24 Brent Fulgham
2000-07-27 18:43 Lenny Gray
2000-07-27 22:50 John R Harrison
2000-07-28 12:49 ` John BEPPU
2000-08-02 17:28 Brent Fulgham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0007280005260B.23279@haguenauer \
--to=quercia@cal.enst.fr \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox