SORU
16 NİSAN 2010, Cuma


Özyineleme döngüsü her zamankinden daha hızlı?

Bu özyineleme bazen döngü daha temiz olduğunu biliyorum, ve yineleme, özyineleme kullanmak varken, zaten hakkında bir sürü soru var biliyorum hakkında bir şey sormuyorum.

Soruyorum ne özyinelemehiçdaha hızlı bir döngü daha mı fazla? Benim için her zaman bir döngü rafine ve döngü yok sürekli yeni yığın çerçeveler kuruyor, çünkü daha hızlı bir özyinelemeli işlevi yerine getirmek için almak mümkün olacak gibi görünüyor.

Özellikle hızlı özyineleme özyineleme doğru yol olduğu uygulamalarda veri, ikili ağaçlarda bazı sıralama fonksiyonları gibi, işlemek için, vb olup olmadığını arıyorum.

CEVAP
16 NİSAN 2010, Cuma


Bu kullanılan dile bağlıdır. Yazdığın 'dil-agnostik', bu yüzden bazı örnekler vereceğim.

Java, C, Python, özyineleme yığını yeni bir çerçeve tahsisi gerektirir çünkü yineleme (genel olarak) göre oldukça pahalı. Bazı C derleyici, derleyici bayrak işlev çağrıları yerine atlar içine özyineleme bazı türleri dönüştüren bu yükü, (aslında, kuyruk aramaların belirli türleri) ortadan kaldırmak için kullanabilirsiniz.

Fonksiyonel programlama dili uygulamaları, bazen, yineleme çok pahalı olabilir ve özyineleme çok ucuz olabilir. Birçok, özyineleme basit bir atlama dönüşür, ama döngü değişkeni değişken) değiştirmekbazengerektiren birden çok iş parçacığı yürütme desteği olan nispeten ağır bazı işlemler, özellikle uygulamaları. Mutasyon eğer ikisi de aynı anda çalışıyor olabilir eğer değiştiren ve Çöp toplayıcı arasındaki etkileşim nedeniyle bu şartlarda pahalı değildir.

Bazı Düzeni uygulamalarında, özyineleme genellikle döngü daha hızlı olacağını biliyorum.

Kısacası, cevap Kodu ve Uygulanmasına bağlıdır. Ne olursa olsun tercih kullanın. Eğer fonksiyonel bir dil kullanıyorsanız, özyinelemeolabilirdaha hızlı olması. Eğer zorunlu bir dil kullanıyorsanız, yinelememuhtemelendaha hızlı. Bazı ortamlarda, her iki yöntem de aynı Kurul oluşturulan (boru sok ve iyice duman) neden olur.

Ek:Bazı ortamlarda, en iyi alternatif ne özyineleme ne de yineleme ama bunun yerine yüksek mertebeden fonksiyonlar. "", ""Ve "" da denir ("") kat. azaltmak filtresi göster bu vardır Sadece bu tercih edilen stil, sadece genellikle daha temiz, ama bazı ortamlarda bu işlevler ilk (veya tek) destek Otomatik paralellik — böylece önemli ölçüde daha hızlı ya da yineleme veya özyineleme. Veri Paralel Haskell böyle bir ortamda bir örnektir.

Liste üreteçleri başka bir alternatif vardır, ama bunlar genellikle sadece yineleme, tekrarlama, ya da daha yüksek mertebeden fonksiyonlar için sözdizimsel şeker.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • xXGAMERrs_Xx

    xXGAMERrs_Xx

    31 Temmuz 2014