遞迴:(是一種分析、解決問題的思想)
遞迴的基本概念:
1了解分治的思想:將乙個難以解決的大問題分割成一些規模較小的相同問題,以便各個擊破,分而治之。如果原問題可以分割成k個子問題,1
2分治法產生的子問題往往是原問題的較小模式,在這種情況下反覆使用分支手段,使子問題與原問題型別一致而起規模不斷縮小,最終使子問題能夠較為簡單的求解。然後利用這些子問題的解最終解決原問題(這是因為原問題在分治過程中始終是依賴於子問題的,它們之間就滿足一定的關係)。這樣自然就產生了遞迴演算法。
3個人認為分治思想的上述2就是遞迴思想的精要描述。我們在考慮是否使用遞迴是由上述2得出兩個方面:一是,考慮原問題是否能夠劃分為一些子問題求解,這些子問題是否與原問題型別一致而規模縮小。2找較小
問題的解(即遞迴的終止條件)。
4找出原問題與子問題的關係,並建立遞迴方程(可以使用數學語言將其描述清楚),同時找出遞迴方程的初始化條件以及各個變數的約束條件。
遞迴演算法:間接或直接呼叫自身的演算法。這個過程就要依賴於遞迴方程。
遞迴實現的基本原理:
採用棧的工作機制來實現。因為我們發現在程式遞迴呼叫的過程中需要儲存當前呼叫的資訊為上層呼叫多用,二且這種呼叫也滿足先進後出原則。只有當前下層呼叫完成後,當前呼叫才能退棧。這個我們以前學過的n!採用遞迴實現時就建立了一系列的工作棧,通過0!=1然後層層返回值,從而層層退棧,最終解決n!問題。不過最為經典的還是漢諾塔問題。
遞迴解決策略:個人認為非常關鍵的在於通過原問題分析得出的子問題也和原問題型別一致(否則不能使用遞迴而應使用分治),再進行抽象總結出子問題和當前原文題的關係從而抽象出動歸方程,最後弄清楚遞迴終止條件和約束關係。最終可依此編寫出相應的演算法。
遞迴的分析案例:
二叉樹的先序遞迴遍歷:
我們知道二叉樹的定義就是乙個遞迴定義,意味著不需要分析就可以使用遞迴方程。因為當二叉樹有n>1個節點時,它的子樹也是一顆二叉樹,那麼毫無疑問遍歷二叉樹的操作與遍歷二叉樹子樹的操作是一樣的。最小的二叉樹就是乙個結點它的左子樹與右子樹都為空,訪問該結點遍歷結束,於是得到了遍歷二叉樹的終止條件。
當前二叉樹不為空時:
1遍歷當前二叉樹的根節點
2先序遍歷該二叉樹左子樹
3先序遍歷該二叉樹右子樹 。
關於遞迴的簡單使用
遞迴簡單使用 使用的軟體為 intellij ideapublic class teacher 開始部分 private static string start string menu1 string menu2 new string system.out.println 歡迎進入獎客富翁系統 fo...
關於遞迴的簡單應用
說到遞迴,不得不說乙個經典的公式 f 1 1,f 2 1,f n f n 1 f n 2 n 3,n n 也就是斐波那契數列 fibonacci sequence 又稱 分割數列。轉換成 來表示 public static int f int i else if i 2 else 這裡介紹兩種我在實...
關於堆疊的簡單分析
關於堆疊的簡單分析 片 public static void main string args private static void swap integer num1,integer num2 執行結果 before swap a 1,b 2 after swap a 1,b 2 大家會發現其中...