函式直接或間接地呼叫自己。
從前有座山的故事。
從前有座山,山里有座廟,廟裡有個老和尚和小和尚,老和尚在給小和尚講故事:從前有座山,山里有座廟,廟裡有個老和尚和小和尚,老和尚在給小和尚講故事:。。。
0,1,1,2,3,5,8…
f(n) = f(n - 1) + f(n - 2),其中f(0) = 0,f(1) = 1
recursion
(int n)
空間複雜度是o(n),因為遞迴使用了遞迴棧來儲存,一層一層向下遞迴,遇到終止條件後又一層一層向上返回,最底層的元素相當於是最後進棧的,但是最先返回,所以是先進後出。最上層的n會被一層一層分解直到1,每一層相當於是n-1,所以遞迴高度為n,而遞迴棧的空間複雜度是遞迴的高度,也就是o(n)。
no.509 斐波那契數
思路:當n為0和1時,遞迴終止,返回0和1。否則將n拆解為fib(n)拆解為fib(n-1)和fib(n-2)返回。
class
solution
}
no.206 反轉鍊錶
思路:判斷head節點是否為空或head的下乙個節點是否為空,是則表示鍊錶為空或當前節點是鍊錶最後乙個節點,返回head。
遞迴呼叫本函式直到鍊錶的最後乙個節點,即滿足上面的條件,返回鍊錶的最後乙個節點5到新鍊錶result中,此時head指標指向的是節點4,將節點4的下乙個節點5的next指向節點4,將節點4的next指向null,返回包含節點4和節點5的鍊錶到新鍊錶result中,此時head指標指向的是節點3,將節點3的下乙個節點4的next指向節點3,將節點3的next指向null,返回包含節點3,4,5的鍊錶到新鍊錶result中,以此類推,直到返回的result包含2,3,4,5,此時頭節點指向1,將1的下乙個節點2的next指向1,將1的next指向null,返回包含節點1,2,3,4,5的反轉之後的鍊錶。
class
solution
}
LeetCode之遞迴演算法
何為遞迴?程式反覆呼叫自身即是遞迴。我自己在剛開始解決遞迴問題的時候,總是去糾結這一層函式做了什麼,它呼叫自身後的下一層函式又做了什麼。然後就會覺得實現乙個遞迴解法十分複雜,根本就無法下手。這是乙個思維誤區,一定要走出來,既然遞迴是乙個反覆呼叫自身的過程,這就是說它的每一及的功能都是一樣的,因此我們...
演算法 遞迴演算法
遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...
遞迴演算法經典例項 演算法 遞迴演算法
遞迴現象 老和尚講故事 自己呼叫自己 兩面鏡子互相映像 兩者相互呼叫 演算法思想 把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式自己呼叫自己的情況。遞迴函式 內部操作直接或間接地呼叫了自己的函式。遞迴函式兩大要素...