SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011