我有以下代码来确定数字是否为质数:
(define (recIsPrime num n)
(display num)(display (- n 1))(newline)
(cond ((= (remainder num (- n 1)) 0) #f)
(else (if (> n 3)
(recIsPrime num (- n 1)))))
#t
)
第一次通话时,号码将相同。我遇到的问题是,每次返回#t而不是发现2到n之间的数字可被整除时应返回的#f。
找到这样的数字后,如何返回#f;如果找不到这样的数字,如何绕过我试图返回的#t?
平衡括号。在#t
外面cond
; 它是中的最后一个表达式recIsPrime
,因此它总是作为其值返回。
只需将其放在cond
的分支中,如下所示:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
(else
(if (> n 3)
(recIsPrime num (- n 1))
#t
))))
拥有if
内部空间cond
是多余的;最好将它们cond
与三个替代方案融合为一个:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
((> n 3)
(recIsPrime num (- n 1)))
(else
#t )))
或使用逻辑连接词
(define (recIsPrime num n)
(and (not (= (remainder num (- n 1))
0))
(or (<= n 3)
(recIsPrime num (- n 1)))))
看起来您打算将其称为as,(recIsPrime num num)
然后让它按降序尝试数字。别。与大数相比,小数的可能性更大。
同样,2是质数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句