Loops 带计数器的递归过程?
我应该编写一个递归算法来返回谓词“Loops 带计数器的递归过程?,loops,recursion,scheme,racket,counting,Loops,Recursion,Scheme,Racket,Counting,我应该编写一个递归算法来返回谓词“pred”为真的区间内的整数数 我成功地编写了从下界到上界的递归部分,但我不知道如何实现某种计数器,每当谓词对整数为真时,计数器递增1,因为我的代码是递归的(即,我一直调用相同的方法)。如果我在方法内部创建计数器,每次调用它时,计数器将初始化为0 到目前为止我写的是: (define count-true (lambda (pred lower upper) (if (or (> lower upper) (= lower upper))
pred
”为真的区间内的整数数
我成功地编写了从下界到上界的递归部分,但我不知道如何实现某种计数器,每当谓词对整数为真时,计数器递增1,因为我的代码是递归的(即,我一直调用相同的方法)。如果我在方法内部创建计数器,每次调用它时,计数器将初始化为0
到目前为止我写的是:
(define count-true
(lambda (pred lower upper)
(if (or (> lower upper) (= lower upper))
(pred lower)
(count-true pred (+ lower 1) upper))))
原问题:
编写一个递归(非迭代)过程,(count true pred lower-upper)
,类型为(number->boolean),number,number->number
,该过程返回应用于该数字的谓词pred
为真的范围内的整数数
在函数式编程中,不设置局部变量/计数器。您可以使用参数或返回值来传递(和命名)数据。在这种情况下,您可以使用返回值(如果您不想更改函数参数的数量以添加计数器) 因此,每当
pred
为true
时,您返回从递归调用中接收到的值,该值以1
递增,或者返回接收到的值
(定义count true
(lambda(pred?下部-上部)
(如果(或(>上下)(=上下))
0
(如果(pred?较低)
(+1(计数真实预测值)(+1下)上))
(计算真实预测值?(+下1)上()())))
评论:
我将pred
更改为pred?
,因为它是一个谓词,所以它使代码更具可读性。您还可以简化此代码,首先调用count true
,然后使用if
来决定如何处理返回值。第一个if
with或子句也可以使用=
简化。如果你想学习列表、数字等的递归,《小阴谋家》是一本很棒的书