1
該分配用於定義一個函數,該函數接受單個列表作爲參數,並輸出列表的最大值。我覺得我的嵌套「ifs」和「let」非常過量,並且功能過早終止而不打印答案。我已經找到了一個使用遞歸正確使用的例子,但已經空了,DrRacket中的調試功能對於通過遞歸調用進行跟蹤並不是非常有用。方案最大功能(遞歸)
任何幫助表示讚賞,謝謝。
(define max
(lambda (x)
(let ((y (car x)))
(if (null? (cdr x))
y
(let ((m (max(cdr x))))
(if (> m y)
m
y)
)))))
當然,max函數將一個數字列表作爲輸入,並返回列表中最大的數字值。我試圖做的是使用let將第一個值指定爲最大值(「y」),然後逐個遍歷每個值並將其與當前最大值進行比較。如果它更大,(「y」)會有一個新值。 我假設(cadr x)如果沒有其他值,將返回null;會改爲使用使用(cdr x)導致相同的問題? – 2011-02-26 03:27:07
@Decency:是的,你應該在測試中使用'(cdr x)'。你認爲應該用遞歸調用的答案來做什麼(即,假設你有一對'(x。z)',應該用'(max z)')來做什麼? – 2011-02-26 03:28:53
我不太確定這一對你的意思,但我會盡力迴應。我希望遞歸調用的答案能夠被傳遞,並與在程序運行中遞歸獲取的每個(汽車x)進行比較。我只是不確定y的範圍是否會讓我這樣做,如果可以的話,如何去做。我意識到我正在將它看作基本上是一個do-while循環,但我不知道這是否是這種語言的正確方法。 – 2011-02-26 03:37:00