Java - miért olyan rossz rekurzív verem túlcsordulás az orosz
Egyik a források a nyelv nem lehet rossz vagy jó definíció szerint.
A rekurzió lehetővé teszi a programozónak, hogy világosan kifejezzék gondolataikat minden (és különösen a fordító), de az ára ennek a - megérteni, mi történik. Meg kell érteni, hogy ez a rakás, hogyan működik, hogy kerül a verem hívás esetén. Meg kell, hogy egy kicsit több fejlett fantázia megérteni rekurzió abbahagyja, mikor és mi fog történni, ha hív. Meg kell érteni, hogy miért globális változók változtatni kell óvatosan, és ugyanabban az időben, ezért a függvény legyen a lehető legkisebb változók (legfeljebb újrafelhasználhatóságot).
Azonban bármilyen rekurzív algoritmus írhatók nélkül rekurziót. (Általában egy dinamikusan bővülő tömb)
Csak a klasszikus rekurziót - a képtelenség, hogy pontosan beállítsa a stack használatával összeállítása gombok (milyen gyakran Java, mint gyűjtött a parancssorból, vagy emlékszik, hogyan kell kezdeni egy szál egy nagy köteg).
Ezért resume (bocs, hogy durva), ha ezt a kérdést, akkor ne használja a rekurziót, ha rájössz, hogy mit csinálsz - akkor ez egy nagyon praktikus eszköz növeli az olvashatóságot a kód számos feladatot és munkát adva a fordító helyett Ön szempontjából optimalizálás.
A választ a január 29-én 16:57
A rekurzió nem rossz. Egyszerűen, ez különös figyelmet igényel a köteget. Mivel növekszik minden lépést, amely gyakran vezet a zsúfoltság.
Elvileg lehet helyettesíteni iterációs (ciklus). Ami általában azt tanácsolják, hogy ezt a nyelvet, ahol nincs farok rekurzió.
Például, a Scala is egyértelműen meg kell határozni, hogy kell használni a farok rekurzió alkalmazásával kommentárok @tailrec. majd a hívás (call) váltja átmenet (megy).
Helytelen használata rekurzió okozhat verem túlcsordulás és egy hatalmas számítási költség. Azonban rekurzív megközelítés jelentős előnye van a természetes algoritmus: a matematikai indukciós gép, akkor könnyen tesztelheti az eredmény helyes (szem előtt tartva a sajátosságait adatreprezentációs memória). Azt javasoljuk, hogy jelölje rekurzív eljárás, hogy ellenőrizze a kommentár @tailrec optimalizálási funkciót.
Optimalizálja a rekurzív módszer általában igénybe farok rekurzió továbbítunk egy további paraméter a függvény, amely tárolja az eredményeket az előző számításokat. Azonban bizonyos esetekben ez nem elég: például az azonos például a Fibonacci-számok: itt kell tartani a találati listát. Használhatja a lusta gyűjtemény, vagy azon kívül a módszer. Néha szükség van olyan összetettebb feladatokat, például, amikor meg kell találni az optimális eredmények listája. Ebben az esetben, akkor a rekurzió a cut-off elemek.
Válaszol február 26-11:49