Perbincangan terperinci tentang Rekursi dalam JavaScript

王林
Lepaskan: 2024-08-29 14:39:32
asal
780 orang telah melayarinya

Recursion in JavaScript সম্পর্কে বিস্তারিত আলোচনা

Rekursiialah teknik di mana fungsi memanggil dirinya sendiri. Ia adalah corak pengaturcaraan yang membahagikan masalah itu kepada yang lebih kecil untuk menyelesaikan masalah yang lebih besar. Menggunakan rekursi dalam JavaScript kita boleh melakukan perkara seperti gelung atau lelaran, tetapi rekursi boleh menjadi lebih mudah dan lebih telus untuk menyelesaikan beberapa masalah.

Bagaimanakah rekursi berfungsi?

Rekursi mempunyai dua bahagian utama:

  1. Kes Asas:Ini ialah keadaan di mana fungsi tidak akan memanggil dirinya sendiri lagi. Ia bertindak sebagai titik perhentian untuk fungsi rekursif. Fungsi rekursif tanpa kes asas kadangkala boleh menyebabkan limpahan tindanan (iaitu, kehabisan memori disebabkan panggilan berulang ke fungsi tersebut).
  2. Kes Rekursif:Ini ialah bahagian di mana fungsi memanggil dirinya sendiri, cuba menyelesaikan masalah dengan memecahkannya kepada bahagian yang lebih kecil.

cth:

  1. Pengiraan faktor:Faktorial ialah jumlah hasil darab semua nombor daripada nombor hingga 1. Contohnya, n!=n×(n−1)×(n−2)×...×1 5! = 5 * 4 * 3 * 2 * 1 = 120.

Faktorial ialah hasil darab semua integer positif daripada nombor itu hingga 1.

rrrree

Di sini, fungsi faktorial memanggil dirinya sendiri sehingga n menjadi 1. Apabila n ialah 1, fungsi itu tidak lagi memanggil dirinya sendiri dan mengembalikan 1. Keputusan ini dikembalikan secara beransur-ansur melalui panggilan sebelumnya dan panggilan asal mengembalikan 120 sebagai hasil akhir.

Apabila faktorial(5) dipanggil, ia akan mula memanggil 5 * faktorial(4) dan seterusnya sehingga faktorial(0) di mana keadaan kes asas dipenuhi.

  1. Siri Fibonacci:Siri Fibonacci ialah contoh yang terkenal di mana setiap nombor ialah jumlah dua nombor sebelumnya. F(n)=F(n−1)+F(n−2)

Siri Fibonacci ialah satu siri nombor dengan dua nombor pertama ialah 0 dan 1, dan setiap nombor berikutnya ialah hasil tambah bagi dua nombor sebelumnya. Contohnya, 0, 1, 1, 2, 3, 5, 8, …

rrrree

Penjelasan:

  • Kes Asas: Jika nilai n ialah 0, fibonacci(0) mengembalikan 0. Jika nilai n ialah 1, fibonacci(1) mengembalikan 1.
  • Kes Rekursif: Dalam mana-mana kes lain, fibonacci(n) akan memanggil dirinya dengan n−1 dan n−2 dan mengembalikan jumlahnya.

Jawapan Penjelasan:

  1. fibonacci(0)= 0
  2. fibonacci(1)= 1
  3. fibonacci(2)= fibonacci(1) + fibonacci(0) = 1 + 0 = 1
  4. fibonacci(3)= fibonacci(2) + fibonacci(1) = 1 + 1 = 2
  5. fibonacci(4)= fibonacci(3) + fibonacci(2) = 2 + 1 = 3
  6. fibonacci(5)= fibonacci(4) + fibonacci(3) = 3 + 2 = 5
  7. fibonacci(6)= fibonacci(5) + fibonacci(4) = 5 + 3 = 8

এভাবে fibonacci(6) এর মান দাঁড়ায় 8, যা 6-তম ফিবোনাচি সংখ্যা।

  1. Tree Traversal:Tree ডেটা স্ট্রাকচারে একটি Recursive Function ব্যবহার করে DFS (Depth-First Search) করা যেতে পারে।
javascriptCopy code function traverseTree(node) { console.log(node.value); node.children.forEach(child => traverseTree(child)); } const tree = { value: 1, children: [ { value: 2, children: [] }, { value: 3, children: [ { value: 4, children: [] }, { value: 5, children: [] } ] } ] }; traverseTree(tree); // Output: // 1 // 2 // 3 // 4 // 5
Salin selepas log masuk

Recursion এর উপকারিতা এবং অসুবিধা

  1. উপকারিতা
  2. কোড সরলতা:Recursion জটিল সমস্যাকে সহজভাবে প্রকাশ করতে সাহায্য করে, বিশেষ করে এমন সমস্যা যেখানে সমস্যাগুলি নিজের অনুরূপ।
  3. কোড পুনরাবৃত্তি:Recursion প্রায়শই কোডের পুনরাবৃত্তি দূর করে এবং সমাধানগুলোকে ছোট এবং পরিষ্কার করে।
  4. কিছু নির্দিষ্ট সমস্যা সমাধানে কার্যকর:যেমন Tree এবং Graph ডেটা স্ট্রাকচার traversal, অথবা Mathematical series এবং sequences।
  5. অসুবিধা
  6. পারফরম্যান্স:প্রত্যেকটি recursive কল একটি নতুন execution context তৈরি করে, যা stack memory তে সংরক্ষণ করা হয়। অতিরিক্ত recursion এর ফলে stack overflow এর ঝুঁকি থাকে।
  7. জটিলতা:সাধারণ লুপের তুলনায় কিছু ক্ষেত্রে recursion বোঝা কঠিন হতে পারে, বিশেষ করে শুরুতে।
  8. অকার্যকর ফাংশন:কিছু ক্ষেত্রে, recursion অকার্যকর হতে পারে, যদি recursive ফাংশনের প্রতিটি কলের ফলে অনেক অপ্রয়োজনীয় গণনা হয়। এক্ষেত্রেMemoization বা Iterativeপদ্ধতির ব্যবহার অধিক কার্যকরী।

Atas ialah kandungan terperinci Perbincangan terperinci tentang Rekursi dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!