私はClojureには新しく、これまでのコードの作成方法は "Clojureの方法"と一致していないと思います。少なくとも、大きな値のStackOverflowエラーにつながる関数を書いています。私はrecurの使用について学びましたが、これは良い一歩です。しかし、以下のような関数を2500000のような値にするにはどうすればいいですか?このClojure関数をスタックを吹き飛ばさないように書くにはどうすればいいですか?
(defn fib [i]
(if (>= 2 i)
1
(+ (fib (dec i))
(fib (- i 2)))))
この関数は、私の目には、フィボナッチジェネレータの「単純な」実装です。私ははるかに最適化された他の実装を見てきましたが、彼らが何をするのかは明らかではありません。私。関数の定義を読むと、 "oh、fibonacci"にはなりません。
どのポインタも大変ありがとうございます。
ありがとうございました!私はこれについて熟考します。 :) – bitops
ちょっと戻って助けを求めていただけです。あなたの関数に92より大きい値を渡すとエラーになります。 ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow(Numbers.java:1374)何か不足していますか? – bitops
ちょうど明確にするために、私はあなたの答えがまだ好きです。 :) – bitops