#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 vs a--,運算符優先級
我不認爲遞歸(a--)由於未定義的行爲是錯誤的,因爲只有一個副作用,就是減少1。這種副作用正是我想要的。謝謝。
你知道'--a'和'a - '之間的區別嗎?考慮第7行和第8行傳遞給'遞歸'的實際值。 – Ryan
'int tmp = a--;遞歸(tmp);'< - 那怎麼樣? – zerkms
遞歸(a - );'調用'遞歸(a);'每次減少a,但減小後的值不再使用 –