#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
void recursion (int a) {
if (a != 0) {
recursion(--a); //works
recursion(a--); //does not work
printf("%d\n", a);
}
}
int main (int argc, char *argv[]) {
printf("start\n");
recursion(10);
printf("finished\n");
return 0;
}
当我递归(a--)时为什么会出现分段错误但是当我递归(-a)时工作正常?
我不认为递归(a--)由于未定义的行为是错误的,因为只有一个副作用,即将a减少1.这种副作用正是我想要的。谢谢。
答案 0 :(得分:2)
--a
和a--
都有增加a
的副作用。不同之处在于,表达式--a
的值是递减后a
的值,而a--
的值是a
的值在递减之前。
因此在后一种情况下,a
的相同值递归地传递给函数。结果,你有一个无限的递归循环,导致堆栈溢出。
您需要使用recursion(--a)
进行递归调用,以便将递减的a
值传递给函数。