-1
这是迭代版本,但它调用递归函数。这会对其时间/空间复杂性产生影响吗?如何计算二项式系数时间和空间的复杂性? (迭代与递归)
int factorial(int n) {
if (n == 1) {
return 1;
}
else {
return n * factorial(n - 1);
}
}
int binomial_coefficient_iterative(unsigned int n, unsigned int k) {
if (k == 0 || k == n) {
return 1;
}
else {
return (factorial(n)/(factorial(k) * factorial(n - k)));
}
}
这是递归版本,使用C(N,K)= C(N-1,K)+ C(N-1,K-1)式算出。
int binomial_coefficient_recursive(unsigned int n, unsigned int k){
if (k == 0 || k == n) {
return 1;
}
else {
return binomial_coefficient_recursive(n - 1, k) + binomial_coefficient_recursive(n - 1, k - 1);
}
}
最后但并非最不重要的,可以通过你用C计算二项式系数C(N,K)(N,K-1)?
不完全回答我的问题,但是,是的,确定它可以通过使用memoization改善。仍然对当前形式的算法的时间/空间复杂性感到好奇。 – Marek
@Marek在编辑中增加了时间复杂度 –