所以我试图在方案中迭代地解决 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))
)
)
)
)
但是,我的测试用例一直导致“#[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
这就是 wikipedia 中示例的工作方式:
(collatz 6)
=> 9
(collatz 11)
=> 15
(collatz 27)
=> 112
所以基本上我们是在计算给定数字的 Collatz 序列的长度。
关于scheme - 方案中的 Collatz 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285547/