使用递归函数添加数字

时间:2013-11-15 10:53:51

标签: c function

我正在学习C,我想出了这个例子

     #include <stdio.h>

     int MyAdd(int);
     main ()
     {
          int i;
          int c = 0;
          c = MyAdd(5); 
          printf("%d\n", c);
     }

     int MyAdd(int a)
     {
          if(a > 0)
               return a + MyAdd(--a);
          else
               return 0;
     }

我自己运行这个并且我计算15.(5 + 4 + 3 + 2 + 1)但是当我运行它时,我得到10 ...为什么??? 在第一次,我们得到5+(再次执行func)等等。?

2 个答案:

答案 0 :(得分:6)

当在表达式中使用时,副作用操作符会做出有趣的,意想不到的事情,因为你基本上受编译器的支配。

在这种情况下,您的编译器在第一个操作数之前评估a + MyAdd(--a)的第二个操作数。所以,在添加变量之前,你要减少变量。

在任何情况下,您都不需要减量运算符。我建议将该行重写为return a + MyAdd(a - 1);

答案 1 :(得分:0)

做类似的事情:

foo(a++) or
foo(++a)

不是很安全,因为你依赖于编译器实现 - 这意味着它从左到右或从右到左读取参数。

让我们考虑第一种情况:

foo(a++)

如果编译器从左到右读取参数,结果将是foo(a),然后是++。 如果从右到左读取参数,则结果将调用f(a + 1)