20 Mart 2013, ÇARŞAMBA
Kuyruk özyineleme tam olarak nasıl çalışır?
Neredeyse ne kadar kuyruk çalışıyor ve bu arasındaki fark normal bir özyineleme anlamak. Bensadecebunu neden yaptığını anlamıyorumyokdönüş adresini hatırlamak yığın gerektirir.
// tail recursion
int fac_times (int n, int acc) {
if (n == 0) return acc;
else return fac_times(n - 1, acc * n);
}
int factorial (int n) {
return fac_times (n, 1);
}
// normal recursion
int factorial (int n) {
if (n == 0) return 1;
else return n * factorial(n - 1);
}
Kendisi bir işlevi kuyruk özyineleme işlev çağrıldıktan sonra yapacak bir şey yok ama benim için anlam ifade etmiyor.
CEVAP
20 Mart 2013, ÇARŞAMBA
Derleyici sadece bu dönüşümü mümkün
int fac_times (int n, int acc) {
if (n == 0) return acc;
else return fac_times(n - 1, acc * n);
}
böyle bir şeye:
int fac_times (int n, int acc) {
label:
if (n == 0) return acc;
acc *= n--;
goto label;
}
Bunu Paylaş:
Nasıl Haskell kuyruk özyineleme çalışı...
Kilit tam olarak nasıl çalışır?...
SignalR DAHİLİ olarak nasıl çalışır?...
Çağrı yığını tam olarak nasıl çalışır?...
Nasıl veritabanı DAHİLİ olarak çalışır...