需要帮助来实现此过程iterativ

时间:2016-02-23 16:25:43

标签: scheme

(define (length2 item)
   (if (null? item)
     0
  (+ 1 (length2 (cdr item)))))

这是我制作的递归版本,但我真的在努力使其成为迭代版本。我对两者之间的区别有了很好的理解。在递归中它只增加+1,当它到达结尾时,它将所有1加在一起,而在迭代中它每一步计算它。(如果我误解了,请随时告诉我。)

你们有没有任何想法如何使它成为迭代和一些提示让我在Scheme中更好地理解它?

很抱歉,如果这是一个微不足道的问题,但我对这种语言和函数式编程相当新。

1 个答案:

答案 0 :(得分:0)

您可以添加count变量以使其迭代并跟踪长度

(define (length2 item count)
(if (null? item)
    count
    ((length2 (cdr item) (+ count 1)))))

修改

按照上面定义的方式,您需要为length2调用0的初始值为count的过程。

如果您不想这样做,那么您可以制作一个中间函数来处理这个问题。它看起来像这样

(define (actual_length item count)
(if (null? item)
    count
    ((actual_length (cdr item) (+ count 1)))))

(define (length2 item) (length2 item 0))

现在,您可以正常调用length2程序,例如

(length2 the_list)