**作
由於自己遇到好多次遞迴的問題,一開始也不是很理解,看到大佬們的題解都是膜拜ing 打算自己總結一下
一般來說,遞迴的問題**都非常的簡潔 但簡潔所帶來的問題就是不容易理解,而且對於初學者來說,還會很容易轉牛角尖
往往遞迴的問題都有章可循,在a了幾道題並觀賞了大佬們寫的**後,總結出了遞迴問題的規律
程式反覆呼叫自身即是遞迴。
我們需要關心的主要是以下三點:
整個遞迴的終止條件。
一級遞迴需要做什麼?
應該返回給上一級的返回值是什麼?
還有乙個很重要的一點就是本身函式體的名字!!,後面我會提到,函式體的名字有著很重要的意思
我們直接看leetcode
第一題 leetcode 104. 二叉樹的最大深度
class solution
//root的左、右子樹的最大深度
int leftdepth = maxdepth(root.left);
int rightdepth = maxdepth(root.right);
//返回的是左右子樹的最大深度+1
return math.max(leftdepth, rightdepth) + 1;
}}
第二題 leetcode 110. 平衡二叉樹
class solution
public int depth(treenode root)
}
第三題 leetcode 101. 對稱二叉樹
class solution
public boolean helper(treenode left , treenode right)
}
第四題 leetcode 111. 二叉樹的最小深度
class solution
}
我們先列舉這四道題,這四道題都可以用遞迴方法直接a掉,而且**十分簡潔,我們可以看到,每乙個都是在呼叫自身。我們並不是去考慮整體**去做了什麼,而是只關心當前這一層做了什麼。
第一次寫部落格,想到哪寫到哪,文筆還需要提公升,謝謝。
一道演算法題目的解法
有這樣一道演算法題目 144張牌放到若干的盒子中,每個盒子中放10到 40張,問有多少種放法?不考慮順序 由144 10 14.4 144 40 3.6 可得,盒子的數量最少為4,最多為14.假設有n個盒子 4 n 14 每個盒子中分別放 a1,a2,an 張牌,由於不考慮順序,不妨設a1 a2 a...
一些JS題目的解法
題目是從看到的。1.找出數字陣列中最大的元素 使用mach.max函式 2.轉化乙個數字陣列為function陣列 每個function都彈出相應的數字 1,2,3 map function x 3.給object陣列進行排序 排序條件是每個元素物件的屬性個數 sort function a,b 4...
網上看到一題目的解法的啟示
已知函式 f x 2ax 2 x 1 在區間 0,1 上僅有乙個零點,求實數 a 的取值範圍。法1 某搜題軟體的解法 由於 f x 0 在區間 0,1 上僅有乙個根,有以下兩種情形 f 0 f 1 0 begin a neq 0 delta 0 end 且解在 0,1 上,由 得 1 2a 2 0 ...