我在寫方案中的尾遞歸函數函數時遇到了困難。我想用輔助函數編寫函數。我知道我需要一個參數來保存一個累計值,但之後我就陷入了困境。我的代碼如下。方案中的尾遞歸功能函數
(define (pow-tr a b)
(define (pow-tr-h result)
(if (= b 0)
result
pow-tr a (- b 1))(* result a)) pow-tr-h 1)
我編輯了我的代碼,現在它工作。它如下:
(define (pow-tr2 a b)
(define (pow-tr2-h a b result)
(if (= 0 b)
result
(pow-tr2-h a (- b 1) (* result a))))
(pow-tr2-h a b 1))
有人可以向我解釋爲什麼輔助函數應該有與主函數相同的參數。我很難想出爲什麼這是必要的。
該解決方案嚴格遵循OP的代碼(使用內部'define')。由於它只被調用過一次,因此除了現有的代碼之外,這將是一個顯示命名'let'的好地方,以作爲它們如何使用的示例。 –
@JoshuaTaylor是的,這似乎是一個很好的時刻。我用你的建議更新了我的答案 –