[14A1] 1次元の動的計画法1

次の再帰関数はnが大きくなると時間がかかる。

int f(int n) {
  if(n <= 1) { return 1; }
  return f(n-1) + f(n-2) + f(n-3);
}

動的計画法により高速にこの関数のn=1〜20値を計算し表示するプログ ラムを作成せよ。出力は「"f(%d) = %d\n"」の書式文字列で出力するこ と。main以外の関数を作成しないこと。

記号列 

コード 

選択肢

ア #include <stdio.h>
イ int main(void) {
ウ }
エ return 0;
オ for(i = 0; i <= 20; ++i) {
カ for(i = 1; i <= 20; ++i) {
キ for(i = 2; i <= 20; ++i) {
ク for(i = 3; i <= 20; ++i) {
ケ int i, a[21] = { 1, 1, 3, };
コ int i, a[21] = { 1, 1, 2, };
サ int i, a[21] = { 1, 2, 3, };
シ int i, a[21] = { 1, 2, 4, };
ス a[i] = a[i-1] + a[i-2] + a[i-3];
セ a[i] = a[i-1] + a[i-2] + 2*a[i-3];
ソ a[i] = a[i-1] - a[i-2] + 2*a[i-3];
タ printf("f(%d) = %d\n", i, a[i]);

選択肢の行をドラグして上のコード領域に配置してください。 コード領域の行はドラグにより位置が変更できます。 削除したい場合は選択肢の領域に戻してください。