gpt4 book ai didi

clojure - 如何使用 Clojure 生成斐波那契数列?

转载 作者:行者123 更新时间:2023-12-04 23:08:37 26 4
gpt4 key购买 nike

(ns src.helloworld)

(defn fibonacci[a b] (println a b (fibonacci (+ b 1) a + b)))

(fibonacci 0 1)

我是函数式编程的新手,并决定开始学习 Clojure,因为它是 非常与 C# 不同。我想拓宽我的视野。

这是我得到的错误:
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 (+ b 1) a + b)

这里你调用函数 fibonacci有四个参数: (+ b 1) 的结果,变量的值 a , 函数 +以及变量 b 的值.由于 fibonacci被定义为只接受两个参数,你会得到你所做的错误。

解决此问题后,您将收到堆栈溢出错误,而看不到任何输出。这是因为您将递归调用置于 fibonacci作为 println 的参数.所以它会在执行 println之前尝试执行递归调用。 .由于递归是无限的,所以调用 println永远不会发生。你应该做的是先打印号码,然后调用 fibonacci递归地。

一旦你这样做,程序将打印很多数字,但堆栈最终仍会溢出。这是因为 clojure 没有优化掉尾调用,所以即使使用尾递归,无限递归也会导致堆栈溢出。为了防止这种情况,请使用 recur形式而不是正常的递归。

除了这些点之外,当您错误地执行斐波那契数列时,您的程序将打印错误的数字。

关于clojure - 如何使用 Clojure 生成斐波那契数列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com