在C中递归中使用static关键字

时间:2013-06-07 10:11:33

标签: c

我目前正在Russian Peasant algorithm上解决一个程序,我正在使用递归代码:

我的代码:

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;
}

即使我将sum声明为静态也不是当我打印printf时(“%d \ n”,sum);每次调用都会打印出最后修改后的值!..

我应该如何打印每次通话的价值?为什么我的方法不起作用?

2 个答案:

答案 0 :(得分:2)

您可能需要一个没有static关键字的局部变量。 这样,每个函数调用都会保留其sum的本地副本。

答案 1 :(得分: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;
}