#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。这个副作用正是我想要的。谢谢。
发布于 2017-10-16 09:41:45
--a和a--都有增加a的副作用。不同之处在于,表达式--a的值是递减后的a的值,而a--的值是递减前的a的值。
因此,在后一种情况下,a的相同值以递归方式传递给函数。因此,你有一个无限的递归循环,这会导致堆栈溢出。
您需要对递归调用使用recursion(--a),以便将a的减量值传递给函数。
https://stackoverflow.com/questions/46761784
复制相似问题