Yineleme sırasında değişkenlerin nasıl oluşturulduğundan ve bellekte saklandığından emin değilim. Aşağıda C Primer Plus alınan bir örnek:Değişkenler yinelemede bellekte nasıl saklanır?
Seviye 3: çıkışını verir
#include <stdio.h> void recursiontest(int); int main(){ recursiontest(3); return 0; } void recursiontest(int n){ printf("Level %d : %#x\n", n, &n); if(n < 4) recursiontest(n + 1); printf("LEVEL %d : %#x\n", n, &n); return; }
0x3ce1f8bc
Seviye 4: 0x3ce1f89c
SEVİYE 4: 0x3ce1f89c
LEVEL 3: 0x3ce1f8bc
Orijinal işlev çağrısı için yerel olan "n" değişkeni, birinci (ve yalnızca) özyinelemeli aramanın sekansından sonraki bir adreste olduğu gibi görünür. Neden?
Bir işlevi çağırdığımda, onun resmi parametreleri bildirilen ve kendisine gönderilen gerçek argüman açısından tanımlanmış değil midir? Bu, ikinci çağrının (yinelemeli) çağrısından önce n numaralı yerel çağrının tamsayısının yaratıldığı anlamına gelmez mi? İkinci aramanın n ilk çağrısından önceki bir adresi nasıl olabilir?
Farkı görmek için * çok * daha düşük bir değer (-99 gibi) kullanın. – Makoto