Rumah hujung hadapan web tutorial js js中递归函数的使用介绍_javascript技巧

js中递归函数的使用介绍_javascript技巧

May 16, 2016 pm 05:48 PM
fungsi rekursif

下面我们就做一个10以内的阶乘试试看吧:


[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
 


递归函数的调用就说这么多了

js递归函数调用自身时的保险方式。
来自js高级程序设计
一个典型阶乘递归函数:
复制代码 代码如下:

function fact(num){
if (numreturn 1;
}else{
return num*fact(num-1);
}
}

以下代码可导致出错:
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //出错

由于fact已经不是函数了,所以出错。
用arguments.callee可解决问题,这是一个指向正在执行的函数的指针。
新的函数为:
复制代码 代码如下:

function fact(num){
if (numreturn 1;
}else{
return num*arguments.callee(num-1); //此处更改了。
}
}
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //结果为24.


JS普通递归的改进

递归函数是在一个函数通过名字调用自身的情况下构成的,如下所示:
复制代码 代码如下:

function factorial(num)
{
if(num{
return 1;
}
else
{
return num * factorial(num-1);
}
}

这是一个经典的阶乘函数。表面看来没有什么问题,但下面的代码却可能导致它出错。
var anotherFactorial = factorial;

anotherFactorial(4); //输出 24
factorial = null;
anotherFactorial (4); //TypeError: Property 'factorial' of object [object Window] is not a function chrome 下测试
原因在于,我们定义的函数名,其实是指向函数的一个指针,此时定义了anotherFactorial 也指向了那个函数,所以调用anotherFactorial (4)可以成功的输出24
此时 factorial = null; 那么执行定义函数的引用就剩下了anotherFactorial,那么在调用anotherFactorial(4)就会显示以上的错误的信息。
此时可以使用arguments.callee来替代函数定义中的 factorial,
函数的定义就变成了:
复制代码 代码如下:

function factorial(num)
{
if(num{
return 1;
}
else
{
return num * arguments.callee(num-1);
}
}

那么在使用上面的4行测试代码,最后一行测试代码也可以成功的输出24.
--------------------------------------
上述的内容摘自>第2版 144页 7.1节
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah teknik pengoptimuman untuk fungsi rekursif C++? Apakah teknik pengoptimuman untuk fungsi rekursif C++? Apr 17, 2024 pm 12:24 PM

Untuk mengoptimumkan prestasi fungsi rekursif, anda boleh menggunakan teknik berikut: Gunakan rekursif ekor: Buat panggilan rekursif pada penghujung fungsi untuk mengelakkan overhed rekursif. Memoisasi: Simpan hasil pengiraan untuk mengelakkan pengiraan berulang. Kaedah bahagi dan takluk: menguraikan masalah dan menyelesaikan sub-masalah secara rekursif untuk meningkatkan kecekapan.

Bagaimana untuk menyelesaikan ralat bersarang fungsi yang berlebihan dalam kod Python? Bagaimana untuk menyelesaikan ralat bersarang fungsi yang berlebihan dalam kod Python? Jun 25, 2023 pm 12:35 PM

Python ialah bahasa pengaturcaraan yang sangat berkuasa, dan ramai pengaturcara memilih Python sebagai bahasa pengaturcaraan utama mereka. Walau bagaimanapun, terlalu banyak fungsi bersarang dalam kod boleh menyebabkan atur cara sukar untuk dikekalkan dan difahami. Artikel ini akan meneroka cara menyelesaikan ralat bersarang fungsi yang berlebihan dalam kod Python. Pengenalan ringkas kepada sarang fungsi Sarang fungsi merujuk kepada proses mentakrifkan fungsi lain dalam badan sesuatu fungsi. Fungsi bersarang boleh menjadikan struktur program lebih jelas dan kod lebih mudah dibaca dan diselenggara. Walau bagaimanapun, terlalu banyak fungsi bersarang boleh membawa kepada struktur kod yang terlalu kompleks.

Penggunaan fungsi rekursif C++ dalam algoritma carian? Penggunaan fungsi rekursif C++ dalam algoritma carian? Apr 17, 2024 pm 04:30 PM

Fungsi rekursif digunakan dalam algoritma carian untuk meneroka struktur data seperti pokok. Carian pertama mendalam menggunakan timbunan untuk meneroka nod, manakala carian pertama keluasan menggunakan baris gilir untuk melintasi lapisan demi lapisan. Dalam aplikasi praktikal, seperti mencari fail, fungsi rekursif boleh digunakan untuk mencari fail tertentu dalam direktori tertentu.

Apakah syarat keluar untuk fungsi rekursif dalam C++? Apakah syarat keluar untuk fungsi rekursif dalam C++? Apr 17, 2024 am 11:33 AM

Syarat keluar dari fungsi rekursif C++ termasuk: Syarat garis dasar: Semak sama ada fungsi mencapai keadaan yang boleh mengembalikan hasil secara langsung, biasanya menilai sama ada keadaan atau nilai parameter tertentu memenuhi ambang. Syarat penamatan rekursif: Alternatif kepada atau sebagai tambahan kepada syarat garis dasar, memastikan fungsi berhenti selepas beberapa panggilan rekursif tertentu, dengan menjejak kedalaman rekursif atau menetapkan had kedalaman rekursif maksimum.

Penggunaan fungsi rekursif C++ dalam algoritma pengisihan? Penggunaan fungsi rekursif C++ dalam algoritma pengisihan? Apr 17, 2024 am 11:06 AM

Aplikasi fungsi rekursif dalam algoritma pengisihan dalam C++ Algoritma isihan sisipan dan gabungan yang dilaksanakan oleh fungsi rekursif boleh menguraikan masalah kompleks kepada sub-masalah yang lebih kecil dan menyelesaikannya dengan cekap melalui panggilan rekursif. Isih sisipan: Mengisih tatasusunan dengan memasukkan elemen satu demi satu. Cantumkan isihan: Bahagi dan takluk, bahagikan tatasusunan dan susun sub-tatasusunan secara rekursif, dan akhirnya gabungkan sub-tatasusunan yang diisih.

Bagaimana untuk melaksanakan strategi pengoptimuman rekursi ekor bagi fungsi rekursif C++? Bagaimana untuk melaksanakan strategi pengoptimuman rekursi ekor bagi fungsi rekursif C++? Apr 17, 2024 pm 02:42 PM

Strategi pengoptimuman rekursif ekor secara berkesan mengurangkan kedalaman tindanan panggilan fungsi dan menghalang limpahan tindanan dengan menukarkan panggilan rekursif ekor kepada gelung. Strategi pengoptimuman termasuk: Kesan rekursif ekor: Semak sama ada terdapat panggilan rekursif ekor dalam fungsi. Tukar fungsi kepada gelung: Gunakan gelung dan bukannya panggilan rekursif ekor dan kekalkan tindanan untuk menyimpan keadaan perantaraan.

Bagaimana untuk melaksanakan faktorial menggunakan fungsi rekursif dalam bahasa Go? Bagaimana untuk melaksanakan faktorial menggunakan fungsi rekursif dalam bahasa Go? Jul 31, 2023 pm 08:31 PM

Bagaimana untuk melaksanakan faktorial menggunakan fungsi rekursif dalam bahasa Go? Faktorial ialah pengiraan biasa dalam matematik yang mendarabkan integer bukan negatif n dengan semua integer positif yang lebih kecil daripadanya, sehingga 1. Sebagai contoh, faktorial bagi 5 boleh dinyatakan sebagai 5!, dikira sebagai 54321=120. Dalam pengaturcaraan komputer, kita sering menggunakan fungsi rekursif untuk melaksanakan pengiraan faktorial. Pertama, kita perlu memahami konsep fungsi rekursif. Fungsi rekursif merujuk kepada proses memanggil fungsi itu sendiri dalam definisi fungsi. Apabila menyelesaikan masalah, fungsi rekursif akan berterusan

Nota mengenai butiran fungsi rekursif dalam fungsi Golang Nota mengenai butiran fungsi rekursif dalam fungsi Golang May 16, 2023 am 08:09 AM

Di Golang, rekursi ialah cara untuk fungsi memanggil dirinya sendiri. Banyak masalah boleh diselesaikan menggunakan fungsi rekursif, seperti mengira faktorial, jujukan Fibonacci, dsb. Walau bagaimanapun, apabila menulis fungsi rekursif, anda perlu memberi perhatian kepada beberapa butiran, jika tidak, ralat program mungkin berlaku. Artikel ini akan memperkenalkan butiran fungsi rekursif di Golang untuk membantu pembangun menulis fungsi rekursif yang lebih stabil dan boleh dipercayai. Pengendalian situasi asas Apabila menulis fungsi rekursif, anda perlu terlebih dahulu mempertimbangkan situasi asas, iaitu syarat untuk keluar dari fungsi rekursif. Jika tidak ada yang betul

See all articles