我需要使用这个递归函数并将其转换为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)
答案 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))