遞迴的本質是什麼?

時間 2021-06-04 04:15:33

1樓:闊之

問題標籤中有「程式設計」,那麼程式設計中遞迴的本質這裡分兩個層次:

1、計算機執行的底層機制

遞迴的本質

2、解決問題的思想上

如果乙個問題的解決方式(邏輯A)不複雜,但是問題的規模(任務量)比較大。那麼需要做的就是不斷地分解問題的規模,分解到最後你會發現,問題規模無法進一步分解(即任務分無可分,不可再分),以至於有的時候甚至不需要任何處理即可直接返回。接下來要做的就是根據邏輯A把返回的成果收集起來(層層彙總)。

(注意遞迴與分治的思想是有區別的,簡單來說,分治更側重於分解後的並行處理,而遞迴注重問題規模的分解。進一步說,遞迴更多的是用在分治過程中的任務分解這一環節。)

至於什麼函式自己呼叫自己,找到遞迴出口,都是表現層的東西,記住了就說明可以用遞迴了。

2樓:小電腦大教育

遞迴就是自己呼叫自身,本質就是將規模較大的問題化成結構相同但規模較小的問題。即大事化小,小事化了。為了避免死迴圈,要設乙個結束條件,不能無限劃分下去。

比如,斐波那契數列,第n項值F(n)可以表示為F(n-1)+F(n-2)。將較大的n化為兩個較小的數,最終縮小到1和0,而F(0)=1,F(1)=1,劃分結束。再一步步還原成大的。

將大的分解成小的,再由小的還原成大的,就是遞迴的本質。只不過,我們只管將大的分解成小的。而由小的還原成大的,是由機器自動完成的。

3樓:徐暢

本質上來說,遞迴可以用棧實現,可以說遞迴的本質是棧。

另一方面,迭代與遞迴在理論上可以等價代換,但是思路完全不同。遞迴比較接近人類的思維,即由高到低。迭代則是由低到高。二者之間的轉換也是複雜的。

遞迴的還有乙個有趣之處在於可以優先宣告乙個問題的終止邊界,剩餘則交給子問題來處理,也就是已知起點,設定終點,給乙個方向,就算方向有點繞,只要不往回跑,基本上可以確定程式自己能夠走到終點。就算自己無法把握遞迴的全貌,依然能夠讓程式求出問題的解。

另外我還可以想到lambda是如何微妙的處理遞迴函式的,以及尾遞迴的優化之類的細節。具體部分我也不熟悉,有興趣可以自己了解。

本質的本質是什麼?

首先,本質表示事物內部或事物之間所固有的 內在的 穩定的聯絡。那麼這種聯絡的本質是什麼呢?好比人存在的意義是什麼?NaOH和HCl會反應,它們之間有某種聯絡,這種聯絡的本質是 未知 本質就是定義,即詞的定義,本質的本質就是定義的定義。詞是用來指稱人所感受的到世界的,這種指稱是人們 一部分人 共同約定...

本質的本質是什麼呢?

夕陽醉了 鬧不清楚啊。主觀只能無限接近的描述乙個客觀的東西。但永遠無法真正描述清楚。就像蘋果的顏色,基於眼睛看到後是紅色,如果用最精密的儀器看也許會看到更多的顏色。例如味道,我嘗是甜的,但也只是基於我自己的味蕾。也許它還有其它的味道,只是我受限於自己的味蕾所以嘗不出來。我們所說的一切都是基於我們的五...

動態規劃和遞迴之間的關係是什麼?

鄧哥不是燉鍋 個人理解 遞迴 當前時刻的 的解一定來自於上一時刻 DP 當前時刻的 的解可能來自於前面任意時刻大部分時候,DP和帶記憶的遞迴效果相同。當DP每個時刻都只依賴於前一時刻的最優解時,DP退化為貪心法 多讀書。讀好書。參考 演算法導論 中的動態規劃篇章。不懂就該找書看。演算法是演算法,實現...