我已经制作了一个基本程序,输出任何长度为“n”的Fibonacci序列。 这是我的代码:
(define (fibh n)
(if (< n 2)
n
(+ (fibh (- n 1)) (fibh (- n 2)))))
(define (fib n)
(do ((i 1 (+ i 1)))
((> i n))
(display (fibh i))))
例如,它将输出112358
。
我想要的是一个列表,例如(1 1 2 3 5 8)
。
任何解释如何做到这一点将不胜感激。
答案 0 :(得分:6)
(map fibh '(1 2 3 4 5 6))
会做到这一点。如果您不想手动枚举整数,那么实现一个简单的递归函数,它将为您执行此操作,如:
(define (count i n)
(if (= i n)
'()
(cons i (count (+ i 1) n))))
(注意:这不是尾递归,但使用该算法来计算斐波那契数,这不是您最关心的问题。)
答案 1 :(得分:2)
Petite Chez Scheme Version 8.3
Copyright (c) 1985-2011 Cadence Research Systems
> (define (fib n)
(let loop ((n n) (f2 1) (f1 1) (fs (list)))
(if (zero? n) (reverse fs)
(loop (- n 1) f1 (+ f2 f1) (cons f2 fs)))))
> (fib 50)
(1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584
4181 6765 10946 17711 28657 46368 75025 121393 196418 317811
514229 832040 1346269 2178309 3524578 5702887 9227465
14930352 24157817 39088169 63245986 102334155 165580141
267914296 433494437 701408733 1134903170 1836311903
2971215073 4807526976 7778742049 12586269025)