#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 - 、演算子の優先度
副作用が1つしかないので、定義されていない動作によって再帰(a--)が間違っているとは思われません。これは、1を減らすことです。この副作用は、私が欲したものです。ありがとう。
'--a'と' a - 'の違いは何ですか? 7行目と8行目に 'recursion'に渡される実際の値を考えてみてください。 – Ryan
' int tmp = a--;再帰(tmp); '< - それはどうですか? – zerkms
'recursion(a - );'回帰(a);を呼び出すたびにaを減少させますが、減少した値はもう使用されません –