(ns src.helloworld)
(defn fibonacci[a b] (println a b (fibonacci (+ b 1) a + b)))
(fibonacci 0 1)
我是新來功能編程,並決定開始學習Clojure,因爲它的很不同於C#。我想擴大我的視野。如何使用Clojure生成斐波那契數列?
這是我得到的錯誤:
Clojure 1.2.0
java.lang.IllegalArgumentException:
Wrong number of args (4) passed to:
helloworld$fibonacci
(helloworld.clj:0) 1:1 user=>
#<Namespace src.helloworld> 1:2 src.helloworld=>
數學問題從來不是我的強項,我從來沒有真正做任何操作這樣的數字,所以我想你可以給任何指導。
請不要給我整個解決方案。
最好我想一些好的提示,也許它應該看起來像一個骨架。
將一個簡單遞歸函數(如'!')轉換爲尾遞歸版本比對'fibonacci'做這個操作要容易得多,該函數有兩個自調用。你不能再機械地去做;相反,您必須利用關於斐波那契遞歸樹外觀的領域特定知識。在這種情況下可能會發生,但不適用於每個雙遞歸函數。 – amalloy 2011-04-16 19:22:55
@amalloy:在Sergio的'fibonacci'函數中只有一個遞歸調用。 – sepp2k 2011-04-16 19:31:06