プロが教える店舗&オフィスのセキュリティ対策術

C言語プログラミングについて

漸化式のプログラミング

int a(int n)

{

    if (n == 0)

        return 1;

    else if (n == 1)

        return 2;

    else

        return 4 * a(n - 1) - a(n - 2);

}

int main(void)

{

    int n;

    for (n = 2; n <= 5; n++)

        printf("n=%d, f=%d\n", n, a(n));

    return 0;

}
これは再帰を用いているプログラミングです。

それを再帰を用いないプログラミングに直したいです。

直すとこのようになります。
int main(void) {


    int n, N = 5;

    int an, bn, cn;

    an = 2;

    bn = 1;

    for (n = 2;n <= N;n++) {

        cn = 4 * an - bn;

        bn = an;

        an = cn;

        printf("n=%d f=%d\n", n, an);

    }

}

直すときにコツありませんか?
こんな風に考えたらわかりやすいとか

A 回答 (3件)

漸化式なら若いnから順に計算して行けばよいので、


みなこのパターンだと思います。
    • good
    • 0

過去、機器制御でフィボナッチ数列を扱った時は、質問者さんの作成された再帰無しのコードのようになりました。


ですので、直し方については私から申し上げることは何もありません。
業務用途の場合、生成された値が想定通りであることが重要であるため、いかに検証をするかという事が大切になります。
そのときはたしか、Excelで生成した値と比較する方法で検証をした覚えがあります。
    • good
    • 0

>再帰を用いないプログラミングに直したいです。


>直すときにコツありませんか?
>こんな風に考えたらわかりやすいとか
式変形して、再帰を用いないで計算できる一般解を求めて、それをプログラミングする
でしょうかね。

それにしても空行が多いプログラム、読みにくいですね。
なんで?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!