【发布时间】:2013-03-11 04:39:01
【问题描述】:
我对递归函数和跟踪有基本的了解,但是当我尝试跟踪以下程序时出现了问题:
#include <stdio.h>
#include <stdlib.h>
int f1(int *a, int c);
int main(void) {
int a=2, b=3, c=4, d=5;
a = f1(&c, f1(&b,d));
printf("a= %d b= %d c= %d d= %d\n",a,b,c,d);
system("pause");
return 0;
}
int f1(int *a, int c) {
*a = c - 2;
c = c*2 - (*a);
printf("a= %d c= %d\n", *a, c);
return c - *a;
}
当我跟踪时,我收到了两个对 f、f(4,4) 和 f(3,5) 的调用。我可以正确跟踪返回值和 f 函数中的 printf 语句。但是 main 中的最终 printf 给了我 a= 4 b= 3 c= 2 d= 5 当我写出来时,我最终得到 c=4 ......即使在我对我的工作进行了两次和三次检查之后。当我调试时,我找不到主“c”的值何时发生变化,而且我当然没有在主“c”的代码中看到任何算术。
在此先感谢...我感觉有些小东西被我忽略了。
【问题讨论】:
-
这不是递归。
f1永远不会调用自己。 -
@JonathonReinhart 怎么会这样? a = f1(&c, f1(&b,d)) 根据定义似乎是递归的。
-
不知道我该怎么说。这里没有没有递归。函数
f1从不调用f1。你所拥有的与temp = f1(&b, d); a = f1(&c, temp);没有什么不同,只是main调用f1两次。