所以我试图在方案中迭代地解决 collatz 函数,但我的测试用例一直显示为
(define (collatz n)
(define (collatz-iter n counter)
(if (<= n 1)
1
(if (even? n) (collatz-iter (/ n 2) (+ counter 1))
(collatz-iter (+ (* n 3) 1) (+ counter 1))
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
但是,我的测试用例始终导致“#[constant 13 #x2]”。我写错了什么,如果有的话?
你忘了打电话collatz-iter。另外,不清楚你打算用 做什么counter,你只是增加它,但从未真正使用它的值 - 你的过程将始终返回1(假设 Collatz 猜想为真,这似乎很有可能)。
我猜您打算归还计数器,因此以下是修复程序的方法:
(define (collatz n)
(define (collatz-iter n counter)
(if (<= n 1)
counter ; return the counter
(if (even? n)
(collatz-iter (/ n 2) (+ counter 1))
(collatz-iter (+ (* n 3) 1) (+ counter 1)))))
(collatz-iter n 1)) ; call collatz-iter
Run Code Online (Sandbox Code Playgroud)
这就是维基百科中示例的工作原理:
(collatz 6)
=> 9
(collatz 11)
=> 15
(collatz 27)
=> 112
Run Code Online (Sandbox Code Playgroud)
所以基本上我们正在计算给定数字的 Collatz 序列的长度。
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |