首頁  >  文章  >  web前端  >  “FindSequence”函數中的遞歸如何運作?

“FindSequence”函數中的遞歸如何運作?

Susan Sarandon
Susan Sarandon原創
2024-10-18 07:55:03584瀏覽

How Does Recursion Operate in the

深入研究「FindSequence」的遞歸

Eloquent Javascript 引入了一個具有挑戰性的問題:編寫一個函數來產生一系列加法和乘法以達到給定法的目標數字。提供的程式碼使用了遞歸,這引發了對其操作的疑問。

findSequence 函數中存在一個巢狀函數 find。此函數遞歸地探索目前數字的兩種可能的轉換:加 5 或乘以 3。每次轉換都會產生一個新數字,並且該過程將繼續,直到達到目標或當前數字超過目標。

在每個步驟中,都會傳遞表達式的文字表示。例如,從數字1開始,初始表達式為“1”。如果選擇加 5,則表達式變為「(1 5)」。透過記錄這些表達式,該函數可以追蹤達到每個數字所採取的步驟。

如果達到目標,則最後一步的表達式表示有效序列。否則,函數傳回null,表示失敗。進行多次遞歸調用,每次探索不同的路徑,直到找到有效序列或所有路徑都已用盡。

為了說明遞歸,讓我們考慮找出目標編號 14 的序列。

(1, "1")
(5, "1 + 5")
(10, "(1 + 5) + 5")
(15, "((1 + 5) + 5) + 5")  // Discard, exceeds goal
(30, "((1 + 5) + 5) * 3")  // Discard, exceeds goal
(15, "(1 + 5) * 3")  // Discard, exceeds goal
(3, "1 * 3")
(8, "(1 * 3) + 5")
(13, "((1 * 3) + 5) + 5")
(18, "(((1 * 3) + 5) + 5) + 5")  // Discard, exceeds goal
(39, "(((1 * 3) + 5) + 5) * 3")  // Discard, exceeds goal
(24, "((1 * 3) + 5) * 3")  // Discard, exceeds goal
(9, "(1 * 3) * 3")
(14, "((1 * 3) * 3) + 5")  // Success!

透過這個逐步遞歸的過程,函數最終找到序列:“((1 3) 3) 5”,它代表1 和3 的乘積加上5 .

以上是“FindSequence”函數中的遞歸如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn