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

时间:2018-10-26 11:35:33

标签: recursion scheme primes

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

(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?

1 个答案:

答案 0 :(得分:1)

平衡括号。 #tcond之外;它是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)))))

看起来您打算将其称为(recIsPrime num num),然后让它按降序尝试数字。别。与大数相比,小数的可能性更大。

此外, 2 是素数。