2015-11-04 24 views
-5

你能帮我以最好的方式解决这个问题吗? 我想知道这个函数如何在方案中写“fac(N,X)是可证明的,如果X是N的阶乘” 这段代码运行成功但没有执行输出!检查方案中X是N的阶乘

(define (fact N) 
    (* N (fact (- N 1)))) 
(define (fac N X) 
    (if (= X (fact N)) #T))) 
+2

这不太可能,它成功运行,因为它永远不会终止 - 你的递归没有基本情况。 – molbdnilo

回答

0

在你事实上的定义,你需要停止递归调用,当你达到N = 1

在你的FAC的定义,你有一个太多“)”在定义的结束。此外,你可以删除if函数,因为它没有真正的用途。

改正的代码...

(define (fact N) 
    (if (> N 1) 
    (* N (fact (- N 1))) 
    1)) 

(define (fac N X) 
    (= X (fact N))) 
+0

大thx:*它执行 – Shu

+0

但是'''仍然在第二个定义结束 – Shu

+0

对不起。当我复制/粘贴代码时,我一定错过了最后一个')'。我编辑了我的答案,以包含该更正。 –