我正在尝试使用递归检查一个数字是否为素数。我被要求使用递归辅助函数,但我不确定应该如何实现它。
我想我知道这个算法,但我从未尝试过在 Racket 中使用递归辅助函数。这是我目前的想法:
- 看看 n 是否能被整除
i = 2
- Set
i = i + 1
- If
i^2 <= n
继续。
- 如果没有值
i
均分n
,那么它一定是素数。
这就是我到目前为止所拥有的......
(define (is_prime n)
(if (<= n 1)
#f
(if (= (modulo n 2) 0)
#f
)
使用递归辅助函数的好方法是什么?
Thanks!
使用助手仅仅意味着您应该将程序分成更小的部分,并可能在单独的过程中封装带有额外参数的循环 - 并且在Scheme中循环经常通过递归调用来实现。一种(天真的)方法来实现is_prime
程序是:
(define (is_prime n)
(cond ((<= n 1) #f)
((= n 2) #t)
((= (modulo n 2) 0) #f)
(else (check 3 n))))
; recursive helper
(define (check i n)
(cond ((> (* i i) n) #t)
((= (modulo n i) 0) #f)
(else (check (+ i 2) n))))
有很多方法可以实现这个过程,也有很多可能的优化;以上应该足以让您开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)