0

私は現在、ロシアの農民アルゴリズムでプログラムを解決しており、再帰コードを使用しています:

私のコード:

int russian_peasant(int a,int b)
{
    static int sum =0;
    if(a>=1)
    {
        if(a%2!=0)
        {
            sum += (b);
            russian_peasant(a/2,b*2);
        }
        else
        { 

            russian_peasant(a/2,b*2);
        }
    }
    printf("%d\n",sum);
    return sum;
}

printf("%d\n",sum); を印刷しているときよりも sum を static として宣言しましたが。最後に変更された値が出力されるよりも呼び出しごとに!..

すべての呼び出しの値をどのように出力する必要がありますか? 私の方法がうまくいかないのはなぜですか?

4

2 に答える 2

1

関数の最後に printf() を呼び出したので、printf() は時系列の逆順に実行され、sum は静的変数であるため、常に最終合計値が出力されます。

各再帰で Sum 計算を出力するには、次のことを試してください。

int russian_peasant(int a,int b)
{
    static int sum =0;
    printf("%d\n",sum);
    if(a>=1)
    {
        if(a%2!=0)
        {
            sum += (b);
            russian_peasant(a/2,b*2);
        }
        else
        { 
            russian_peasant(a/2,b*2);
        }
    }
    return sum;
}
于 2013-06-07T10:29:41.790 に答える