Mengapa versi iteratif lebih lama?

11

Saya melihat di http://programming.lispdream.com/blog/2011/06/recursion-vs-iteration/ dan saya melihat bahwa pada implementasinya implementasi rekursif dan berulang dari fungsi faktorial, iteratif sebenarnya membutuhkan waktu lebih lama diberikan n = 1.000. Saya tidak tahu mengapa (dia tidak menjelaskan, tetapi mengatakan bahwa ini adalah latihan untuk pembaca). Maaf atas kebaruan saya untuk semua ini.

martinjacobd
sumber

Jawaban:

10

Kedua program tersebut tidak setara. Versi rekursif adalah komputasi

(... ((1 * 2) * 3) * 4 ... * n)

sedangkan yang iteratif adalah komputasi

(... ((n * (n-1)) * (n-2) ... * 1)

sehingga jumlah menengah tumbuh lebih cepat untuk versi berulang dan perhitungan num besar lebih cepat ketika angka yang terlibat kecil (Komputasi 1000! tanpa num besar tidak memiliki akal dan dialek cadel dialihkan ke big num secara otomatis).

Pemrogram
sumber
1

Saat Anda membuat algoritme rekursif yang berulang, Anda harus mengimplementasikan tumpukan yang melacak hasil secara eksplisit. Tindakan ini menambahkan operasi tambahan yang berhubungan dengan mendorong dan meletuskan tumpukan yang diperoleh algoritma rekursif secara gratis (well tidak cukup gratis tetapi operasi tambahan bertambah hingga lebih dari biaya rekursi).

Michael Brown
sumber
1
Apakah Anda melihat programnya? Faktorial berulang tidak memanipulasi tumpukan sama sekali.
Pemrogram
-1

Saya hanya bisa menebak, saya bahkan tidak yakin apakah tolok ukur tersebut berasal dari C atau dari kode SBLC. Dugaan saya adalah pelakunya bermutasi variabel. 1000! adalah angka yang cukup besar, mungkin lebih cepat untuk mengisi tumpukan dengan intermidiaries dan membersihkan daripada membuat salinan dan menimpa.

Gabriel Ščerbák
sumber
Itu dari kode SBCL, saya pikir.
martinjacobd