1

我想找出一对落在序列中的数字。我正在尝试编写一个程序来验证 f(1, n) = 2n - 2 和 f(m+1, n+1) = 2f(m, n)。当我打电话(号码 99、100)时它工作,但当我打电话(号码 100、100)时它不起作用。为什么它不起作用?(100, 100) 的序列号是多少?

这是我的程序:

(define (number m n)
   (if (= m 1)
       (- (* 2 n) 2)
       (* 2 (number (- m 1) (- n 1)))))
4

1 回答 1

2

为什么您认为该程序“不起作用”?正如所定义的那样,该函数正确地实现了所需的公式 - 并且当两者mn相等时总是会导致这种基本情况:

(- (* 2 1) 2) ; if m equals 1 then n equals 1

上面的内容当然会返回0,并且递归中的所有乘法都将取消,因为您将一遍又一遍地乘以零:

(* 2 (* 2 ... (* 2 0)))
=> 0

所以问题不在于程序本身,而在于它正在实施的公式。确保它是正确的。

于 2013-04-09T03:36:14.323 回答