-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在編輯中增加了時間複雜度 –