これは反復型ですが、再帰関数を呼び出します。それは時間/空間の複雑さに影響を及ぼしますか?二項係数の時間と空間の複雑さを計算するにはどうすればいいですか? (繰り返し対反復)
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(N、K-1)を用いて二項係数C(N、k)を算出することができますか?
私の質問に正確に答えているわけではありませんが、メモ帳を使用することで改善できるかどうかは確かです。現在の形でのアルゴリズムの時間/空間の複雑さについてはまだ興味があります。 – Marek
@Marek編集に時間の複雑さを追加しました –