Download code

Jump to: navigation, search

Back to Fibonacci_numbers_(Lisp)

Download for Windows: single file, zip

Download for UNIX: single file, zip, tar.gz, tar.bz2

fib.lisp

 1 ; The authors of this work have released all rights to it and placed it
 2 ; in the public domain under the Creative Commons CC0 1.0 waiver
 3 ; (http://creativecommons.org/publicdomain/zero/1.0/).
 4 ; 
 5 ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 6 ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 7 ; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 8 ; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 9 ; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10 ; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
11 ; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 ; 
13 ; Retrieved from: http://en.literateprograms.org/Fibonacci_numbers_(Lisp)?oldid=15288
14 
15 (defun fib (n)
16   "Simple recursive Fibonacci number function"
17   (if (< n 2)
18     n
19     (+ (fib (- n 1)) (fib (- n 2)))))
20 (defun fib-trec (n)
21   "Tail-recursive Fibonacci number function"
22   (labels ((calc-fib (n a b)
23                      (if (= n 0)
24                        a
25                        (calc-fib (- n 1) b (+ a b)))))
26     (calc-fib n 0 1)))
27 (defun printfib (start end)
28   (format t "(fib-trec ~D)=~D~%" start (fib-trec start))
29   (if (< start end)
30     (printfib (+ start 1) end)))
31 (printfib 1 30)
32 


hijacker
hijacker
hijacker
hijacker