SORU
10 Mayıs 2014, CUMARTESİ


Özyineleme ve kendisini bir özelliği var mı?

...ya da sadece bir uygulamadır?

Soruyorum çünkü bu bir tartışma ile profesörüm: kaybettim kredi için çağıran bir işlev özyinelemeli olarak yaptığımız kapak özyineleme sınıf, ve benim iddiam olduğunu öğrendik Bu örtük öğrenme return ve yöntemleri.

Birisi kesin bir cevap olduğundan şüpheleniyorum. çünkü burada soruyorum.

Örneğin, aşağıdaki iki yöntem arasındaki fark:

public static void a() {
    return a();
    }

public static void b() {
    return a();
    }

Başka "a sonsuza kadar devam eder" (gerçek program kullanılır doğru istemi bir kullanıcı tekrar ne zaman verilir ile geçersiz giriş), herhangi bir temel arasındaki fark a b? BM optimize edilmiş bir derleyici için nasıl farklı şekilde ele alınır?

Sonuçta aşağı da a return a() öğrenmiştik bu yüzden o b return a() öğrenerek olup olmadığı konusunda. Biz mi?

CEVAP
11 Mayıs 2014, Pazar


Belirli bir soruya cevap: Hayır, bir dil öğrenme açısından, özyineleme bir özellik değil. Eğer senin Profesör gerçekten yerleşik bir "" yanlış olduğunu henüz. öğretti etmemiş özelliğini kullanarak işaretler

Satır aralarını Okuma, bir ihtimal özyineleme kullanarak, şimdiye kadar, onun için bir öğrenme sonucu olması gereken bir özelliği kullanarak Kaçınılması. Örneğin, belki tekrarında hiç kullanmadın, ya da belki sadece for while hem kullanmak yerine for döngüler kullanılır. Atama, bazı şeyleri yapmak için yeteneğinizi test etmek için amaçlayan ortak ve bunları yapmaktan kaçınmak, Profesör sadece siz verebilirsiniz. işaretleri bu özellik için bir kenara koyun. Ancak, eğer gerçekten sebep olmuştur sizin kayıp işaretleri, Profesör almalı bu gibi bir öğrenme deneyimi kendi - eğer gösteren bazı Öğrenme Çıktıları biridir kriterleri için bir görev olsa da açıkça anlattım öğrencilere.

Diğer yorum ve cevapların çoğu bu yineleme katılıyorum dedi sahip özyineleme burada daha iyi bir seçimdir. Nedenlerle bir çift vardır, ve diğer insanlar, bir dereceye kadar onlara dokundu ise, tam arkalarında düşünce izah ettiler emin değilim.

Yığın Uzaklıklarını Aşıyor

Daha açık bir sen bir yığın taşma hatası alıyorum bu riski. Gerçekçi olmak gerekirse, yazdığın yöntem çok olası bir kullanıcı yanlış giriş birçok kez aslında bir yığın taşması tetiklemek için birçok sebep var ki aslında bir yol.

Ancak, akılda tutulması gereken bir şey değil, sadece yöntemini kendisi, ama diğer yöntemler daha yüksek veya daha düşük bir çağrı zinciri yığında olacak. Bu nedenle, rahat kullanılabilir yığın alanı dağıttıkları yapmak için herhangi bir yöntem için oldukça kaba bir şey. Kimse başka bir kod gereksiz yere bir sürü kullanmış olabileceği riski nedeniyle kod yazmak zaman sürekli boş alan yığın dert istiyor.

Bu yazılım tasarımı konusunda daha genel bir ilke soyutlama denen bir parçasıdır. DoThing(), çağırdığınızda aslında, umurumda gerek gereken her Şey yapılır. Uygulama Detayları hakkında endişelenmenize gerek yoknasılbitti. Ama açgözlü kullanın kod her bit güvenli çağrı zincirindeki kodu ile başka bir yerde bıraktı gösterebiliyor yığını nasıl merak etmenize gerek yok çünkü sonları bu prensip yığını.

Okunabilirlik

Diğer sebep okunabilirlik. Bu kod yapmalılar ideal her satırı sadece ne yaptığını anlatan okunabilir bir belge. Bu iki yaklaşım:

private int getInput() {
    int input;
    do {
        input = promptForInput();
    } while (!inputIsValid(input))
    return input;
}

karşı

private int getInput() {
    int input = promptForInput();
    if(inputIsValid(input)) {
        return input;
    }
    return getInput();
}

Evet, hem bu iş, ve evet anlamak o kadar da zor değil. Ama nasıl iki yaklaşım İngilizce olarak nitelendirilebilir? Benzer bir şey olur diye düşünüyorum

Giriş geçerli kadar giriş için istemi edeceğim, sonra da geri vereceksiniz

karşı

Giriş için istemi edeceğim, sonra giriş iade edeceğim geçerli, aksi takdirde ben giriş almak ve bunun sonucu olarak yerine döner

Belki de aklıma gelen bir şey biraz daha az aksak ifade için ikinci, ama bence sen her zaman bulmak ilk olacak, daha doğru bir tanımı, kavramsal olarak, ne aslında ben de yapmaya çalışıyorum. Bu özyineleme olduğunu söylemek değilher zamandaha az okunabilir. Durumlar için nereye parlar gibi ağaç geçişi yaparız gibi yan yana analiz arasında yineleme ve başka bir yaklaşım ve neredeyse kesinlikle bulmak özyineleme veren kod hangisi daha açık bir şekilde kendini anlatan, satır satır.

İzolasyon, bu iki küçük noktalar vardır. Çok zor bu gerçekten bir yığın taşması neden olur, ve okunabilirlik kazanç küçük. Ama herhangi bir program bu küçük kararların birçoğu bir koleksiyon olacak, Eğer tecrit içinde fazla bir önemi yok eğer doğru değilse bile, önemli olan onları doğru almak arkasında ilkelerini öğrenmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • maxman.tv

    maxman.tv

    29 EKİM 2013
  • tsweeney79

    tsweeney79

    21 Ocak 2008