scheme - 方案中的 Collat​​z 函数

标签 scheme collatz

所以我试图在方案中迭代地解决 collat​​z 函数,但我的测试用例一直显示为

(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]”。如果有的话,我写错了什么?

最佳答案

您忘记调用 collat​​z-iter。此外,不清楚您打算对 counter 做什么,您只是递增它,但从未实际使用它的值 - 您的过程将总是返回1(假设 Collat​​z 猜想为真,这似乎很有可能)。

我猜您打算退还柜台,所以这里是解决程序的方法:

(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

所以基本上我们是在计算给定数字的 Collat​​z 序列的长度。

关于scheme - 方案中的 Collat​​z 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285547/

相关文章:

scheme - ((1 2) 3) 和 ((1 2) . 3) 一样吗?

scheme - Racket 中的管道

list - Cons 元素列出 vs Cons 列表到 Scheme 中的元素

c++ - 在我的递归函数中跟踪计数 (Collat​​z)

python - 我怎样才能将这些数字放入列表中?

Ruby——使用Hash求解Collat​​z序列

functional-programming - letrec 有什么好处?

scheme - 如何在Racket中将实数转换为精确整数?

c - 3n+1算法

c# - 3n+1 给出负数