我正在尝试使用递归检查数字是否为质数。我需要使用递归辅助函数,但不确定如何实现。
我想我知道算法,但是我从未尝试过在Racket中使用递归帮助函数。这是我目前的想法:
i = 2
整除i = i + 1
i^2 <= n
继续。i
的值均分n
,则它必须是素数。这是我到目前为止所拥有的...
(define (is_prime n)
(if (<= n 1)
#f
(if (= (modulo n 2) 0)
#f
)
使用递归帮助器函数是什么好方法?
谢谢!
答案 0 :(得分:4)
使用助手只是意味着您应该将程序分成较小的部分,并可能在单独的过程中用额外的参数封装循环-在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))))
有很多方法可以实现此过程,并且可以进行许多优化。以上应该足以让您入门。
答案 1 :(得分:0)
(define (isPrimeHelper x k)
(if (= x k) #t
(if (= (remainder x k) 0) #f
(isPrimeHelper x (+ k 1)))))
(define ( isPrime x )
(cond
(( = x 0 ) #f)
(( = x 1 ) #f)
(( = x 2 ) #t)
( else (isPrimeHelper x 2 ) )))
I prefer this version.