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

即使我已经将 sum 声明为静态而不是打印 printf("%d\n",sum); 对于每次调用,都会打印最后修改的值!..

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

4

2 回答 2

2

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

于 2013-06-07T10:17:26.483 回答
1

由于您在函数末尾调用了 printf(),因此 printf() 以相反的时间顺序执行 & 因为 sum 是一个静态变量,所以它总是打印最终的 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 回答