在Scheme中实现递归函数计算二项式系数

时间:2014-07-09 19:54:49

标签: scheme

我需要使用这个递归函数并将其转换为scheme

int B(int n, int k)

{ if ((n >= 0) && (k >= 0) && (n >= k))

if ((k == 0) || (k == n)) return 1;

else return B(n-1, k-1) + B(n-1, k);

else return 0; /∗ actually undefined here ∗/
}

我在计划中写的这是正确的吗?

Define B (n, k)

 if(((>= n 0)>= k 0) >= n k))

    B(n-1, k-1) + B(n-1, k)

1 个答案:

答案 0 :(得分:2)

示例C(或类似)代码看起来不正确(请修复缩进并使用大括号!),并且您对Scheme的翻译不正确。显然你没有测试它,它有一些非常明显的错误,它不会编译......无论如何,一个简单的翻译看起来会更像这样:

(define (B n k)
  (if (and (>= n 0) (>= k 0) (>= n k))
      (if (or (= k 0) (= k n))
          1
          (+ (B (- n 1) (- k 1))
             (B (- n 1) k)))
      0))

或者更具惯用性:

(define (B n k)
  (if (>= n k 0)
      (if (or (zero? k) (= k n))
          1
          (+ (B (sub1 n) (sub1 k))
             (B (sub1 n) k)))
      0))