C 递归打印数字的累积值

C 递归打印数字的累积值,c,recursion,accumulate,C,Recursion,Accumulate,我必须只使用递归(不允许循环或goto)打印数字的累积值,我编写了其他类似的函数,这些函数运行良好,但不是这个函数 对于此打印\u累计(0、10、40): a(0)-循环开始,b(10)-迭代值,c(40)-最大值 它只打印10 30,而程序应该打印0 10 30 60,如果我使用的是除a以外的另一个变量(例如总和),它将打印0。 谢谢你的帮助和建议 void print_accumulated(double a, double b, double c) { if (a<c)

我必须只使用递归(不允许循环或goto)打印数字的累积值,我编写了其他类似的函数,这些函数运行良好,但不是这个函数

对于此
打印\u累计(0、10、40)
: a(0)-循环开始,b(10)-迭代值,c(40)-最大值

它只打印10 30,而程序应该打印0 10 30 60,如果我使用的是除a以外的另一个变量(例如总和),它将打印0。 谢谢你的帮助和建议

void print_accumulated(double a, double b, double c)
{
    if (a<c)
    {
        printf("%.0f ", a+=b);
        print_accumulated(a+b, b, c);
    }
}

它不打印0,因为您打印的是
a+=b
,除了将
a
设置为
a+b
,还返回结果
(a+b)
——因此您第一次打印时,您打印的
(0+10)
为10


它不打印60,因为60大于40。既然你说40是最大值,为什么你认为它应该打印60?而且,更确切地说,如果您确实希望打印最大值,您应该将if测试更改为
(a它不打印0,因为您打印
a+=b
,这除了将
a
设置为
a+b
,还返回结果
(a+b)
-因此您第一次打印
(0+10)
哪个是10


它不打印60,因为60大于40。既然你说40是最大值,为什么你认为它应该打印60?而且,不确切地说,如果你确实想打印最大值,你应该将if测试更改为
(a When
print\u累计(20.0、10.0、40.0)
被调用,它在
printf(“%.0f”,a+=b)中打印
30
。然后它通过
40.0
a
30.0+10.0
),运行
print\u累计(40.0,10.0,40.0)
。这将停止递归,因为
40.0
不小于
40.0
使用您喜爱的调试器单步通过程序。调用
print\u累计(20.0,10.0,40.0)
时,它将
30
打印到
printf(%.0f,a+=b);
。然后它将
40.0
传递给
a
30.0+10.0
),运行
print\u累计(40.0,10.0,40.0)
。这会停止递归,因为
40.0
不小于
40.0
使用您最喜欢的调试器单步通过程序。但是从您所说的,程序不会在第二个函数中写入100 400和900,因为这些数字大于40,而且我不想只打印最大值4:0 10 30 60(0,0+10,(0+10)+20,(10+20)+30。我只想累加打印值,而不是整个“a”变量,这就是为什么我在
print\u累计(a+b,b,c);
首先,第二个函数(print\u square)比较a和c,而不是a^2和c。所以10,20和30(a值)都小于40。它是a^2(100400900)第二,我不清楚你在打印中真正想要的进展是什么。但是我建议,当你编码它时,你不要依赖像a+=b这样的副作用。如果你使用局部变量来计算你想要的(关于要打印的内容,以及要传递给下一个递归调用的内容)把它们命名为有意义的东西,这样会更容易思考打印的内容和原因。但从你所说的,程序不会在第二个函数中写入100400和900,因为这些数字大于40,我也不想只打印最大值4:010060(0,0+10,(0+10)+20,(10+20)+30)。我只想累加打印值而不是整个“a”变量,这就是为什么我在
print_累计(a+b,b,c);
首先,第二个函数(print_square)比较a和c,而不是a^2和c。所以10、20和30(a值)都小于40。它是a^2(100400900)第二,我不清楚你在打印中真正想要的进展是什么。但是我建议,当你编码它时,你不要依赖像a+=b这样的副作用。如果你使用局部变量来计算你想要的(关于要打印的内容,以及要传递给下一个递归调用的内容)并将它们命名为有意义的内容,这样就更容易思考打印的内容以及为什么要打印。
void print_square(double a, double b, double c)
{
    if (a<c)
    {
        printf("%.0f ", pow(a, 2));
        print_square(a+b, b, c);
    }
}