怎樣培養遞迴思想?

時間 2021-06-01 00:06:33

1樓:

遞迴是一種程式語言功能,可以用遞迴實現的演算法一般都是分治類演算法。

分治類演算法,即把當前規模的問題劃分為更小的乙個或多個子問題,只要子問題解決到最優,那麼當前問題就可以通過某種推導關係解到最優。

而母問題和子問題,擁有相同的問題format,可以迴圈使用同一種邏輯的函式去解,故名遞迴。

ps:上文中「解到最優」指的是目標函式值達到optimal或achieve某個pattern。前者可以認為是動態規劃,後者包括排序等。

如果某乙個particular子問題反覆出現,我們還會利用一些陣列來記錄已計算過的子問題。免得重複運算。

所以,遞迴是語言功能,需要掌握。而比遞迴更重要的,是要學會分治思想,以及演算法複雜度的預估。LeetCode 有很多二叉樹、單鏈表的題目可以很好地培養分治思想。

2樓:Lins Drizzt

寫演算法的時候有時候只是為了兩點:一是為美觀,而是為了高效(根據情況降低時間複雜度),從這兩點出發,不必刻意去培養遞迴習慣,在需要的時候使用就行

程式設計思想怎麼培養

Nobody 你指的程式設計思想是?好像也沒有標準的程式設計思想吧?假設你說的程式設計思想,指的是 code complete clean code 裡面講述的程式設計思想。你要意思到程式設計是乙個實踐性的技術活,不是說一定要掌握很多程式設計思想才能實踐,先實踐然後回過頭去看程式設計思想的書籍,或許...

不使用遞迴,怎樣遍歷unity的GameObject?

看看我這個行不。private void GetPath node parent name,s node node parent path string Format n s Debug Log path class Ret void Find b Transform parent Stack sk...

軟體開發中設計的思想怎麼培養?

已重置 一定要說怎麼培養的話,那就是玩各種建造類的沙盒遊戲。設計的東西越多,設計的腦洞和經驗也就積累得越快。如果簡單總結的話,可以認為問題的本質都是 你手裡有哪些資源?想要的最終產物是什麼?怎樣對這些資源進行組合?然後我們需要給這些問題增加約束條件。資源當然不是無限制的了,各種資源可使用的數量是有限...