Gerçek hayattan özyineleme örnekleri [kapalı]


99

Ne gerçek dünya bir özyinelemeli yaklaşım derinliğine arama (DFS) yanında doğal çözümdür sorunlar?

( Tower of Hanoi , Fibonacci sayısı veya faktöryel gerçek dünya problemlerini düşünmüyorum . Aklımda biraz uydurulmuşlar.)


2
Tüm önerileriniz için teşekkürler, ancak herkes ağaç / ağ geçişlerini öneriyor. Tezler esasen Derinlik-İlk Arama (veya tahminimce BFS) örnekleridir. İyi motive edilmiş başka algoritmalar / problemler arıyordum.
redfood

10
Bu soruyu beğendim! "Bana X tekniğinin temel pratik kullanımı DIŞINDA, X tekniğinin tüm kullanımlarını anlatın"
Justin Standard

1
Özyinelemeyi her zaman kullanırım ama genellikle matematik ve grafi şeyler için. Programcı olmayanlar için anlamlı olacak özyineleme örneklerini aramaya çalışıyorum.
redfood

6
Kendi macera romanlarınızı seçin! Her şeyi okumak istiyorum ve bunu yapmanın en iyi yolu özyineleme.
Andres

Gerçek dünyada yineleme yoktur. Özyineleme matematiksel bir soyutlamadır. Özyinelemeyi kullanarak birçok şeyi modelleyebilirsiniz. Bu anlamda, Fibonacci kesinlikle gerçek dünyadır, çünkü bu şekilde modellenebilecek pek çok gerçek dünya problemi vardır. Fibonacci'nin gerçek dünya olmadığını düşünüyorsanız, diğer tüm örneklerin de soyutlama olduğunu, gerçek dünya örnekleri olmadığını iddia ediyorum.
Zane

Yanıtlar:


46

Burada pek çok matematik örneği var, ancak gerçek bir dünya örneği istediniz , bu yüzden biraz düşünerek, muhtemelen sunabileceğim en iyisi bu:

Belirli bir bulaşıcı enfeksiyon kapmış, ölümcül olmayan ve kendini hızlı bir şekilde düzelten (Tip A) bir kişi buluyorsunuz, (Bu tip B olarak adlandıracağız) 5 kişiden biri hariç ve bu hastalığa kalıcı olarak bulaşan semptomlar ve sadece bir yayıcı görevi görür.

Bu, B tipi çok sayıda A tipini etkilediğinde oldukça can sıkıcı tahribat dalgaları yaratır.

Göreviniz, tüm B tiplerinin izini sürmek ve hastalığın omurgasını durdurmak için onları aşılamak. Ne yazık ki, herkese ülke çapında bir tedavi uygulayamazsınız, çünkü tipA olan insanlar aynı zamanda B tipi için işe yarayan tedaviye ölümcül alerjiktirler.

Bunu yapmanın yolu, enfekte bir kişi (Tip A) verildiğinde sosyal keşif olacaktır, geçen hafta tüm bağlantılarını seçip her bir kişiyi bir yığın üzerinde işaretleyin. Bir kişiye virüs bulaştığını test ettiğinizde, onu "takip" sırasına ekleyin. Bir kişi B tipi olduğunda, onu baştaki "takip" e ekleyin (çünkü bunu hızlı bir şekilde durdurmak istersiniz).

Belirli bir kişiyi işledikten sonra, sıranın önünden kişiyi seçin ve gerekirse aşı uygulayın. Daha önce ziyaret edilmemiş tüm kişilerini alın ve ardından virüs bulaşıp bulaşmadığını test edin.

Enfekte kişilerin sırası 0 olana kadar tekrarlayın ve ardından başka bir salgın bekleyin.

(Tamam, bu biraz yinelemelidir, ancak yinelemeli bir sorunu çözmenin yinelemeli bir yolu, bu durumda, bir nüfus tabanının enine ilk geçişi, sorunlara olası yolları keşfetmeye çalışır ve ayrıca yinelemeli çözümler genellikle daha hızlı ve daha etkilidir ve özyinelemeyi her yerde zorunlu olarak kaldırıyorum, o kadar içgüdüsel hale geliyor ki ... kahretsin!)


2
Teşekkürler - bu hala grafik geçişi ama iyi motive edilmiş ve programcı olmayan insanlar için mantıklı.
redfood

Hasta 0 bulmanın daha iyi bir örnek olacağına inanıyorum. Enfeksiyona neden olabilecek tüm etkileşimleri belirleyin. Herhangi bir bulaşıcı bulunmayana kadar etkileşim anında bulaşıcı olan tüm katılımcılar üzerinde tekrarlayın
William FitzPatrick

10
bu gerçek dünya örneği artık çok tanıdık geliyor :(
haroldolivieri

2020'de okumak çok korkutucu. Cevaplamaktan çok bir tahmin gibi görünüyor. Kent'in tarif etme şekli covid19 ile tam olarak eşleşiyor. Çin'in bu fikri buradan aldığını söyleyebilir miyiz: P
Vimal Choudhary

111

Gerçek bir özyineleme örneği

Ayçiçeği


13
Matrix mimarı tarafından özyineleme ile kodlanmıştır :)
Marcel

3
Bu nasıl yinelemeli? Elbette, güzel. Ama yinelemeli? Fraktal bir lahana güzelce işe yarardı, ancak bu çiçekte kendime benzerlikler görmüyorum.
Clément

1
Bu biraz yanakta zıplıyor, ancak bu, genellikle özyineleme yoluyla uygulanan Fibonacci dizisi ile tanımlanabilen filotaksinin bir örneğidir.
Hans Sjunnesson

1
"genellikle özyineleme yoluyla uygulanır", çiçeğin bunu yaptığı anlamına gelmez. Belki öyle; Bilmek için yeterli bir moleküler biyolog değilim, ancak nasıl olduğu hakkında bir açıklama yapmadan , bunu özellikle yararlı görmüyorum. Olumsuz oylama. Buna eşlik edecek bir açıklama eklemek isterseniz (biyolojik olarak doğru olsun veya olmasın, fikir verebilir), oylamayı memnuniyetle yeniden değerlendireceğim.
lindes

65

Dosya sistemindeki bir dizin yapısını içeren herhangi bir şeye ne dersiniz? Özyinelemeli olarak dosya bulma, dosyaları silme, dizinler oluşturma vb.

Burada, bir dizinin ve alt dizinlerinin içeriğini yinelemeli olarak yazdıran bir Java uygulaması verilmiştir.

import java.io.File;

public class DirectoryContentAnalyserOne implements DirectoryContentAnalyser {

    private static StringBuilder indentation = new StringBuilder();

    public static void main (String args [] ){
        // Here you pass the path to the directory to be scanned
        getDirectoryContent("C:\\DirOne\\DirTwo\\AndSoOn");
    }

    private static void getDirectoryContent(String filePath) {

        File currentDirOrFile = new File(filePath);

        if ( !currentDirOrFile.exists() ){
            return;
        }
        else if ( currentDirOrFile.isFile() ){
            System.out.println(indentation + currentDirOrFile.getName());
            return;
        }
        else{
            System.out.println("\n" + indentation + "|_" +currentDirOrFile.getName());
            indentation.append("   ");

            for ( String currentFileOrDirName : currentDirOrFile.list()){
                getPrivateDirectoryContent(currentDirOrFile + "\\" + currentFileOrDirName);
            }

            if (indentation.length() - 3 > 3 ){
                indentation.delete(indentation.length() - 3, indentation.length());
            }
        }       
    }

}

2
Bir dosya sistemi motivasyon sağlar (ki bu iyidir, teşekkürler) ancak bu, DFS'nin belirli bir örneğidir.
redfood

4
"DFS" kısaltmasını alamadım - sınıfta oturmayalı epey oldu.
Matt Dillard

5
derinlik arama: dfs (düğüm) {düğümdeki her çocuk {visit (çocuk); }}
Haoest

Basit kod örneği için bkz. Stackoverflow.com/questions/126756/…
Jonik

Bu kodda bir hata var mı? GetPrivateDirectoryContent (), getDirectoryContent () ile değiştirilmemeli mi?
Shn_Android_Dev


16

Matt Dillard'ın örneği iyidir. Daha genel olarak, bir ağacın herhangi bir yürüyüşü genellikle özyineleme ile çok kolay bir şekilde gerçekleştirilebilir. Örneğin, ayrıştırma ağaçlarını derlemek, XML veya HTML üzerinde yürümek vb.


Bu "ayrıştırma ağaçlarını derlemeyi" mantıklı bir yanıt buluyorum, ağaçları içeren ancak soruyu soranın istediği gibi hala bir arama sorunu değil. Bir dilin derlenmesi veya yorumlanmasına ilişkin bazı genel kavramlara genelleştirilebilir. Aynı zamanda doğal bir dili, örneğin İngilizce'yi "yorumlamak" (anlamak, dinlemek) olabilir.
imz - Ivan Zakharyaschev


13

Özyineleme, bir problemi alt problemlere bölerek çözülebildiğinde uygundur, bu problemleri çözmek için aynı algoritmayı kullanabilirler. Ağaçlar ve sıralı listeler üzerindeki algoritmalar doğal bir uyum sağlar. Hesaplamalı geometride (ve 3B oyunlarda) birçok sorun, ikili uzay bölümleme (BSP) ağaçları, yağ alt bölümleri veya dünyayı alt bölümlere ayırmanın diğer yolları kullanılarak yinelemeli olarak çözülebilir .

Yineleme, bir algoritmanın doğruluğunu garanti etmeye çalışırken de uygundur. Değişmez girdiler alan ve girdilerdeki özyinelemeli ve özyinelemeli olmayan çağrıların bir kombinasyonu olan bir sonuç döndüren bir işlev verildiğinde, matematiksel tümevarımı kullanarak işlevin doğru (veya değil) olduğunu kanıtlamak genellikle kolaydır. Bunu yinelemeli bir işlevle veya mutasyona uğrayabilecek girdilerle yapmak çoğu zaman zorludur. Bu, finansal hesaplamalarla ve doğruluğun çok önemli olduğu diğer uygulamalarla uğraşırken yararlı olabilir.


11

Elbette, oradaki birçok derleyici özyinelemeyi yoğun bir şekilde kullanıyor. Bilgisayar dilleri doğaları gereği özyinelemelidir (yani, 'if' ifadelerini diğer 'if' ifadelerinin içine gömebilirsiniz, vb.).


If ifadeleri özyinelemeli değildir.
John Meagher

Ama onları ayrıştırmak için yineleme gerekir, John.
Apocalisp

2
John, if ifadeleri yuvalayabileceğiniz gerçeği, dil tanımının (ve muhtemelen dil ayrıştırıcısının) yinelemeli olduğu anlamına gelir.
Derek Park

Yinelemeli iniş, bir derleyiciyi elle kodlamanın en kolay yollarından biridir. Yacc gibi bir aracı kullanmak kadar kolay değil, ancak nasıl çalıştığını anlamak daha kolay. Tablodaki tüm durum makineleri açıklanabilir, ancak genellikle kara kutular olur.
Eclipse

Cody Brocious'ın "ayrıştırma ağaçlarını derlemek" ten bahseden yanıtı da bu alana işaret etti: dil analizi / yorumlama / derleme.
imz - Ivan Zakharyaschev

9

Bir kapsayıcı denetimindeki tüm alt denetimler için salt okunur devre dışı bırakma / ayarlama. Bunu yapmam gerekiyordu çünkü bazı çocukların kontrolleri kaplardı.

public static void SetReadOnly(Control ctrl, bool readOnly)
{
    //set the control read only
    SetControlReadOnly(ctrl, readOnly);

    if (ctrl.Controls != null && ctrl.Controls.Count > 0)
    {
        //recursively loop through all child controls
        foreach (Control c in ctrl.Controls)
            SetReadOnly(c, readOnly);
    }
}

8

Ünlü Eval / dan döngüsünü uygulayın SICP

alternatif metin
(kaynak: mit.edu )

İşte eval'un tanımı:

(define (eval exp env)
  (cond ((self-evaluating? exp) exp)
        ((variable? exp) (lookup-variable-value exp env))
        ((quoted? exp) (text-of-quotation exp))
        ((assignment? exp) (eval-assignment exp env))
        ((definition? exp) (eval-definition exp env))
        ((if? exp) (eval-if exp env))
        ((lambda? exp)
         (make-procedure (lambda-parameters exp)
                         (lambda-body exp)
                         env))
        ((begin? exp) 
         (eval-sequence (begin-actions exp) env))
        ((cond? exp) (eval (cond->if exp) env))
        ((application? exp)
         (apply (eval (operator exp) env)
                (list-of-values (operands exp) env)))
        (else
         (error "Unknown expression type - EVAL" exp))))

Uygulamanın tanımı şöyledir:

(define (apply procedure arguments)
  (cond ((primitive-procedure? procedure)
         (apply-primitive-procedure procedure arguments))
        ((compound-procedure? procedure)
         (eval-sequence
           (procedure-body procedure)
           (extend-environment
             (procedure-parameters procedure)
             arguments
             (procedure-environment procedure))))
        (else
         (error
          "Unknown procedure type - APPLY" procedure))))

İşte eval-sequence'in tanımı:

(define (eval-sequence exps env)
  (cond ((last-exp? exps) (eval (first-exp exps) env))
        (else (eval (first-exp exps) env)
              (eval-sequence (rest-exps exps) env))))

eval-> apply-> eval-sequence->eval


7

Özyineleme, oyun geliştirmede (ve diğer benzer alanlarda) çarpışma tespiti için BSP ağaçları gibi şeylerde kullanılır.


7

İnsanlar genellikle yinelemeli bir yöntem kullanarak belge yığınlarını sıralar. Örneğin, üzerinde isimler bulunan 100 belgeyi sıraladığınızı hayal edin. Önce belgeleri ilk harfe göre yığınlara yerleştirin, ardından her yığını sıralayın.

Sözlükteki kelimelerin aranması genellikle ikili arama benzeri, yinelemeli bir teknikle gerçekleştirilir.

Organizasyonlarda patronlar genellikle departman başkanlarına komutlar verir, onlar da yöneticilere komutlar verir vb.


5

Yakın zamanda aldığım gerçek dünya gereksinimi:

Gereksinim A: Gereksinim A'yı iyice anladıktan sonra bu özelliği uygulayın.


4

Ayrıştırıcılar ve derleyiciler, özyinelemeli iniş yöntemiyle yazılabilir. Bunu yapmanın en iyi yolu değil, çünkü lex / yacc gibi araçlar daha hızlı ve daha verimli ayrıştırıcılar oluşturuyor, ancak kavramsal olarak basit ve uygulaması kolay, bu yüzden ortak kalıyorlar.


4

Özyineleme, onu daha küçük parçalara bölebileceğiniz (azaltabileceğiniz) ve her parçanın / parçaların orijinal soruna benzer göründüğü sorunlara (durumlara) uygulanır.

Kendine benzer daha küçük parçalar içeren şeylerin iyi örnekleri şunlardır:

  • ağaç yapısı (dal ağaç gibidir)
  • listeler (listenin bir kısmı hala bir listedir)
  • kaplar (Rus bebekleri)
  • diziler (bir dizinin parçası bir sonraki gibi görünür)
  • nesne grupları (bir alt grup hala bir nesneler grubudur)

Özyineleme, problemi daha küçük parçalara ayırmaya devam eden bir tekniktir, bu parçalardan biri çocuk oyuncağı olacak kadar küçük hale gelene kadar. Tabii ki, onları ayırdıktan sonra, orijinal probleminize tam bir çözüm oluşturmak için sonuçları doğru sırada "birleştirmeniz" gerekir.

Bazı yinelemeli sıralama algoritmaları, ağaçta gezinme algoritmaları, eşleme / azaltma algoritmaları, böl ve yönet bu tekniğin tüm örnekleridir.

Bilgisayar programlamasında, yığın tabanlı arama-dönüş tipi dillerin çoğu, özyineleme için yerleşik yeteneklere sahiptir:

  • problemi daha küçük parçalara ayırın ==> kendini orijinal verinin daha küçük bir alt kümesinde arayın),
  • parçaların nasıl bölündüğünü takip edin ==> çağrı yığını,
  • sonuçları geri dikin ==> yığın tabanlı geri dönüş


4

İşlevsel programlama dillerinde bazı harika özyineleme örnekleri bulunur . İşlevsel programlama dillerinde ( Erlang , Haskell , ML / OCaml / F # , vb.), Herhangi bir liste işlemenin özyineleme kullanması çok yaygındır.

Tipik zorunlu OOP tarzı dillerdeki listelerle uğraşırken, bağlantılı listeler ([öğe1 -> öğe2 -> öğe3 -> öğe4]) olarak uygulanan listeleri görmek çok yaygındır. Bununla birlikte, bazı işlevsel programlama dillerinde, listelerin kendilerinin yinelemeli olarak uygulandığını, listenin "başının" listedeki ilk öğeye işaret ettiğini ve "kuyruk" da öğelerin geri kalanını içeren bir listeyi gösterdiğini görüyorsunuz ( [öğe1 -> [öğe2 -> [öğe3 -> [öğe4 -> []]]]]). Bence oldukça yaratıcı.

Listelerin bu şekilde ele alınması, kalıp eşleştirmeyle birleştirildiğinde ÇOK güçlüdür. Diyelim ki bir sayı listesi toplamak istiyorum:

let rec Sum numbers =
    match numbers with
    | [] -> 0
    | head::tail -> head + Sum tail

Bu, esasen "eğer boş bir listeyle çağrıldıysak 0 döndür" (özyinelemeyi kırmamıza izin verir) der, aksi halde head değerini + kalan öğelerle çağrılan Sum değerini (dolayısıyla özyinelememiz) döndürür.

Örneğin, bir URL listesine sahip olabilirim , sanırım her URL'nin bağlantı verdiği tüm URL'leri ayırıyorum ve ardından bir sayfa için "değerler" oluşturmak için tüm URL'lere giden / gelen toplam bağlantı sayısını azaltıyorum (Google'ın PageRank ile birlikte alır ve orijinal MapReduce belgesinde tanımlanmış olarak bulabilirsiniz ). Bunu bir belgedeki kelime sayıları oluşturmak için de yapabilirsiniz. Ve çok, çok, çok başka şeyler de.

Bu işlevsel modeli, herhangi bir tür MapReduce koduna genişletebilirsiniz ; burada bir şeyin bir listesini alabilir, onu dönüştürebilir ve başka bir şeyi geri döndürebilirsiniz (ister başka bir liste, ister listedeki bir zip komutu olsun).


3

XML veya ağaç olan herhangi bir şeyin üzerinden geçmek. Dürüst olmak gerekirse, işimde neredeyse hiç özyineleme kullanmıyorum.


Kuyruk yinelemesini bile değil mi?
Apocalisp

Kariyerimde bir kez özyineleme kullandım ve çerçeve değiştiğinde ondan kurtuldum. Yaptığımız işin% 80'i CRUD.
Charles Graham

1
İlk başta "XML" den bahsetmek oldukça garip. Bu doğal bir şey değil, öğreteceğiniz sıradan bir kişinin günlük yaşamda uğraşması gereken bir şey değil. Ancak fikir elbette oldukça mantıklı.
imz - Ivan Zakharyaschev

3

Hiyerarşik bir organizasyonda geri bildirim döngüleri.

Üst düzey patron, üst düzey yöneticilere şirketteki herkesten geri bildirim almalarını söyler.

Her yönetici, doğrudan raporlarını toplar ve onlara doğrudan raporlarından geri bildirim almalarını söyler.

Ve hattın aşağısında.

Doğrudan raporları olmayan insanlar - ağaçtaki yaprak düğümleri - geri bildirimde bulunur.

Geri bildirim, her yönetici kendi geri bildirimini ekleyerek ağacın yukarısına gider.

Sonunda tüm geri bildirimler onu en üst patrona geri götürür.

Bu doğal bir çözümdür, çünkü özyinelemeli yöntem her seviyede filtrelemeye izin verir - kopyaların harmanlanması ve saldırgan geri bildirimlerin kaldırılması. Üst patron olabilir küresel e-posta göndermek ve doğrudan onu geri / ona her çalışanın raporu geribildirim var, ama orada tekrarlama iyi burada çalışan böylece, ve "kovuldun" sorunları "gerçeği işleyemez".


2

Sayfalarınızın bir ağaç yapısında olduğu bir web sitesi için bir CMS oluşturduğunuzu ve diyelim ki kökün ana sayfa olduğunu varsayalım.

Ayrıca {kullanıcı | müşteri | müşteri | patronunuzun}, ağaçta nerede olduğunuzu göstermek için her sayfaya bir kırıntı izi yerleştirmenizi istediğini varsayalım.

Herhangi bir n sayfası için, sayfa ağacının köküne geri dönen düğümlerin bir listesini oluşturmak için özyinelemeli olarak n'nin ebeveynine ve üstüne gitmek isteyebilirsiniz.

Elbette, bu örnekte db'yi sayfa başına birkaç kez vuruyorsunuz, bu nedenle, page-table'i a olarak ve page-table'i tekrar b olarak gördüğünüz ve a.id ile b.parent, böylece veritabanının yinelemeli birleştirmeleri yapmasını sağlarsınız. Uzun zaman oldu, bu yüzden sözdizimim muhtemelen yardımcı olmuyor.

Sonra tekrar, bunu yalnızca bir kez hesaplamak ve bunu sayfa kaydıyla saklamak, yalnızca sayfayı taşırsanız güncellemek isteyebilirsiniz. Bu muhtemelen daha verimli olur.

Neyse, bu benim 0,02 dolarım


2

N seviye derinliğinde bir organizasyon ağacınız var. Birkaç düğüm kontrol edilir ve yalnızca kontrol edilen düğümleri genişletmek istersiniz.

Bu aslında kodladığım bir şey. Özyineleme ile güzel ve kolaydır.


2

Benim işimde ağaç olarak tanımlanabilecek genel veri yapısına sahip bir sistemimiz var. Bu, özyinelemenin verilerle çalışmak için çok etkili bir teknik olduğu anlamına gelir.

Özyineleme olmadan çözmek, çok fazla gereksiz kod gerektirir. Özyineleme ile ilgili sorun, ne olduğunu takip etmenin kolay olmamasıdır. Yürütme akışını takip ederken gerçekten konsantre olmalısınız. Ancak çalıştığında kod zarif ve etkilidir.



2
  • Bir XML dosyasını ayrıştırmak .
  • Çok boyutlu alanlarda verimli arama. Örneğin. 2D'de dörtlü ağaçlar, 3D'de sekizli ağaçlar, kd ağaçları vb.
  • Hiyerarşik kümeleme.
  • Bir düşünün, herhangi bir hiyerarşik yapıyı geçmek, doğal olarak kendini yinelemeye borçludur.
  • Döngülerin olmadığı ve özyinelemenin tek yol olduğu C ++ 'da şablon meta programlaması.

Bu cevabın fikri için "XML" gerekli değildir (ve özellikle XML'den bahsetmek, öğrettiğiniz insanları iğrenç / sıkıcı olabilir). Herhangi bir tipik dil (bir bilgisayar dili veya doğal bir dil), özyinelemeli bir ayrıştırma problemine örnek olabilir.
imz - Ivan Zakharyaschev

Poster, "doğal çözümün yinelemeli yaklaşım olduğu gerçek dünya sorunları" istedi. Bir xml dosyasını ayrıştırmak kesinlikle gerçek bir problemdir ve doğal olarak kendini özyinelemeye borçludur. XML'den tuhaf bir şekilde hoşlanmadığınız gerçeği, XML'in çok yaygın olarak kullanıldığı gerçeğini değiştirmez.
Dima


2

Bildiğim en iyi örnek hızlı sıralama , özyinelemeyle çok daha basit. Şuna baksana:

shop.oreilly.com/product/9780596510046.do

www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047

(3. bölümdeki ilk alt başlığa tıklayın: "Yazdığım en güzel kod").


1
Ve MergeSort da özyinelemeyle daha basittir.
Matthew Schinckel

1
Bağlantı koptu. Kitabın başlığını ekleyebilir misiniz?
Peter Mortensen

@PeterMortensen, kitap Greg Wilson ve Andy Oram tarafından yazılan Beautiful Code. Bağlantıyı güncelledim, ancak O'Reilly artık içeri bakmasına izin vermiyor gibi görünüyor. Ama Amazon'a bir göz atabilirsiniz.
Fabio Ceconello

1

Telefon ve kablo şirketleri, aslında büyük bir ağ veya grafik olan kablolama topolojilerinin bir modelini korurlar. Özyineleme, tüm üst öğeleri veya tüm alt öğeleri bulmak istediğinizde bu modeli çaprazlamanın bir yoludur.

Özyineleme, işleme ve bellek açısından pahalı olduğu için, bu adım genellikle yalnızca topoloji değiştirildiğinde ve sonuç değiştirilmiş bir ön-sıralı liste formatında saklandığında gerçekleştirilir.


1

Tümevarımsal akıl yürütme, kavram oluşturma süreci, doğası gereği yinelemelidir. Beyniniz bunu gerçek dünyada her zaman yapar.


1

Derleyiciler hakkındaki yorumu aynen yapın. Soyut sözdizimi ağaç düğümleri doğal olarak kendilerini özyinelemeye borçludur. Tüm özyinelemeli veri yapıları (bağlantılı listeler, ağaçlar, grafikler vb.) Özyinelemeyle daha kolay işlenir. Çoğumuzun gerçek dünya sorunları nedeniyle okuldan çıktıktan sonra özyinelemeyi çok fazla kullanamayacağımızı düşünüyorum, ancak bunun bir seçenek olarak farkında olmak iyi.


1

Doğal sayıların çarpımı gerçek dünyadaki bir özyineleme örneğidir:

To multiply x by y
  if x is 0
    the answer is 0
  if x is 1
    the answer is y
  otherwise
    multiply x - 1 by y, and add x
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.