回答
可以遞歸地調用所有Racket(方案)函數,但是爲了工作,它們必須被適當地設計。這總是取決於你想要做什麼,你沒有提到。事實上,三個數字都不需要遞歸。遞歸最常用於迭代由列表組成的數據結構。所以更可能的情況是一個函數,採用三個數字(或金額)的列表:
(define (sum lst)
(if (null? lst) 0
(+ (car lst) (sum (cdr lst)))))
(sum '(1 2 3)) => 6
(sum '()) => 0
(sum '(1 2 3 4 5 6)) => 21
更有效的實現將使用傳遞運行總和的遞歸調用一個輔助功能,允許一個尾巴呼叫 - 這不會增加堆棧。
(define (sum lst)
(define (sum-helper lst sum)
(if (null? lst) sum
(sum-helper (cdr lst) (+ (car lst) sum))))
(sum-helper lst 0))
你會注意到sum-helper有一個額外的參數,你已經詢問過了。正如你所看到的,函數調用只是一個列表 - 只要你想(在合理的範圍內)。第一個符號是功能,其餘的是參數。
如果這還不夠,請提供更多詳情。
(define (takes-three-args a b c)
(takes-three-args (* 2 c) (+ 1 b) (/ 1 a))) ;; Loops Forever and consumes
;; an ever-increasing amount of memory.
這似乎是一個很好的算法選擇來回答問題,尤其是考慮到您對其他答案的迴應。 –
什麼算法? OP想要知道如何定義一個多於一個arg函數和如何進行遞歸,並且我定義了一個多於一個arg遞歸函數,而編寫其他答案的人基本上是這麼說的:「爲什麼你會曾經想寫一個多參數函數?「 (雖然他自編輯他的答案以顯示一些代碼,但使用一個只接受一個參數的函數,明確地忽略了OP說他對多參數函數特別困惑,而且它甚至沒有尾部重新啓動。) –
- 1. 具有多個參數的ApiController方法
- 2. c#遞歸方法參數
- 3. 方法=具有多個參數
- 4. 具有多個lambdas的方案遞歸函數
- 5. 解決具有多個遞歸步驟的遞推方程
- 6. 帶參數的遞歸方法
- 7. 傳遞多個塊參數的方法
- 8. SQL遞歸匹配具有多個值
- 9. 定義一個需要幾個參數的遞歸方法
- 10. 具有可變數量參數的遞歸函數 - 如何傳遞左參數?
- 11. 有沒有(*)splat參數在Ruby中傳遞多個參數的方法?
- 12. 具有多個參數的方法的大O分析
- 13. 具有多個參數的對象的工廠方法
- 14. 如何將兩個參數傳遞給具有單參數簽名的方法?
- 15. 遞歸函數的方法
- 16. Java:如何從具有多個參數的方法調用一個參數
- 17. 具有多個返回參數的C#方法
- 18. 具有多個NSString作爲參數的Objective C方法
- 19. 具有多個通用參數的C#方法
- 20. 具有多個參數的調用方法
- 21. UML圖 - 具有多個參數的方法?
- 22. 具有多個參數的scala隱式方法
- 23. 具有多個參數的Setter方法(賦值)
- 24. 調用具有多個參數的方法
- 25. 具有過載的斯卡拉方法多個參數組
- 26. 同一個多方法的不同方法之間的遞歸
- 27. 帶有多個參數的JNI方法?
- 28. Strassen具有遞歸的子立方矩陣乘法算法
- 29. 在NSInvocation中傳遞帶有可變參數的方法的多個參數
- 30. 具有常量參數的遞歸函數
對「如何定義和調用函數?」調用X-Y問題。真的嗎? –
我在stackoverflow的第一個答案,我得到這個? 我不熟悉你的「X-Y」問題,對不起。如果我抓住了你的偏見,你認爲他在問如何定義和調用一個我無法回答的函數。但是,如果您再次閱讀該問題,您會看到OP知道如何定義函數。我將其作爲特別針對遞歸函數/調用的請求來讀取。無論如何,你必須承認OP的問題相當模糊。我不能說你的答案更有幫助。 – lewisbrown
OP知道如何定義單參數函數,例如'(define(f x)x)'。他特別說他在這裏「主要在多個參數上感到困惑」,而你原來的答案基本上是「你爲什麼要寫一個多參數函數?」即使您編輯的迴應也會忽略OP的主要關注點並顯示單參數功能。 –