(defn factorial [n fact]
(if <= n 1)
fact
(factorial (- n 1) (* n fact)))
(defn fact [n]
(factorial (n 1)))
-1
A
回答
0
你可以看到兩個例子相比顯示循環解決使用遞歸的階乘問題在這個問題/復發:
3
它看起來像你想要寫階乘使用參數滿足總,但是你的括號是不完全正確。
(factorial (n 1))
因爲n是在列表中的第一個項目,它被作爲函數調用。但作爲一個數字,它不能這樣使用。
要調用的階乘函數(其中n爲輸入和1作爲初始總數),您可能意味着
(defn fact [n]
(factorial n 1))
有你的階乘函數的其他問題。
(if <= n 1)
<=
是一個函數,所以它需要作爲參數傳遞給,如果
(if (<= n 1)
...
遞歸調用階乘使用時被稱爲是相當多的,你想要什麼您的解決方案,但有」重一些不匹配的括號,這裏就是你可能是指
(defn factorial [n fact]
(if (<= n 1)
fact
(factorial (- n 1) (* n fact))))
然而,有正確性/成語俚語的Clojure的位可以使用,這裏有一個稍微有tter的方式做您的完整的解決方案
(defn factorial [n total]
(if (<= n 1)
total
(recur (dec n) (* n total))))
(defn fact [n]
(factorial n 1))
儘管如此,如果你使用的調用堆棧進行總,你可以做的稍微好一點的
(defn factorial [n]
(if (<= n 1)
1
(* n (factorial (dec n)))))
你可以重組這種略帶使用recur
,這將給你稍微好一些的表現,但我認爲這是一個學術練習,你可以看看其他答案(例如Alan Thompson's answer)。
相關問題
- 1. 的Clojure java.lang.Long中不能轉換到clojure.lang.IFn錯誤
- 2. ClassCastException java.lang.Long不能轉換成clojure.lang.IFn
- 3. java.lang.Long中不能被轉換爲java.math.BigDecimal的
- 4. java.lang.String不能轉換爲clojure.lang.IFn
- 5. java.math.BigInteger不能轉換爲java.lang.Long
- 6. java.lang.Long不能轉換爲java.lang.Double
- 7. java.lang.Long不能轉換爲java.lang.String
- 8. java.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifier不能轉換爲java.lang.Long
- 9. Jedis java.lang.Long中不能轉換爲[B
- 10. 不能打電話點擊處理程序中的JavaScript功能
- 11. java.lang.Double不能轉換爲clojure.lang.IFn問題
- 12. 幫我換了一個滑塊到一個功能我可以打電話給
- 13. 如何防止Clojure的例外:clojure.lang.LazySeq不能轉換到clojure.lang.IFn
- 14. 反序列化JSON:java.lang.Double中不能轉換爲java.lang.Long中
- 15. java.lang.Integer中不能轉換爲java.lang.Long中在科特林(當初始值爲null)
- 16. Apple提供了將CGSize轉換爲CGPoint的功能嗎?
- 17. 當我打電話給我父母的功能時,ESlint報告錯誤
- 18. 什麼是錯誤的,我的功能來撥打電話
- 19. Android應用程序不能安裝提供了一個505錯誤代碼
- 20. Clojure簡單的排序功能錯誤
- 21. 該程序鏈接到哪個庫提供給定的功能?
- 22. 交換!原子,然後:java.lang.ClassCastException:java.lang.String中不能轉換到clojure.lang.IFn
- 23. iPhone中的免提電話功能Voip
- 24. 我應該提供使用電話號碼登錄我的應用程序的功能嗎?
- 25. Hibernate HQL轉換java.lang.ClassCastException:java.lang.Integer不能轉換爲java.lang.Long
- 26. 類轉換異常:java.lang.ClassCastException:java.util.ArrayList不能轉換爲java.lang.Long
- 27. 不能將Nan轉換成Java.lang.long
- 28. 異常而轉換「JSONArray不能被轉換爲JSONObject的錯誤」
- 29. 錯誤:org.apache.xerces.dom.DeferredTextImpl不能轉換爲org.w3c.dom.Element中
- 30. 我需要打電話給我的應用程序,當在Android設備中錯過一個電話
不應該[n事實]只是[n]。 (因子(n 1))只是(因子1)(我幾乎不知道clojure,但似乎可疑) – Novaterata
@Novaterata是正確的。另外,你的if語句是錯誤的,它需要是'(if(<= n 1)then else') – Shlomi