如果递归调用未在方案中返回值,如何返回值

Keagansed

我有以下代码来确定数字是否为质数:

(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章