我目前正在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);每次调用都会打印出最后修改后的值!..
我应该如何打印每次通话的价值?为什么我的方法不起作用?
答案 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;
}