[MasterThe Coding Interview]Algorithms:Recursion
本篇為MasterThe Coding Interview教學影片筆記文
Data Structures + Algorithms = Programs
Class{} + function() = Programs
Recursion的意思是一直提及自己,透過這個方式可以traversal tree、object和DOM。如果寫下一個沒有停止條件的recursion的話,會導致stack overflow,可以透過以下的程式碼在chrome查看stack overflow:
1 | function loop(){ |
寫下recursive function的三個方法:
- Identify the base case
- Identify the recursive case
- Get closer and closer and return when needed.Usually tou have 2 returns
1 | let counter = 0; |
Exercise:Factorial
1 | function findFactorialRecursive(number){ |
Exercise:Fibonacci
1 | function fibonacciIterative(n){ //O(n) |
Recursive VS Iterative
優點 | 缺點 |
---|---|
DRY | Large Stack |
Readability |
以下是幾點要使用recursion的時機:
- 當使用到樹的結構來解決問題時,要考慮到recursion的解法。
- 當問題可分割並建立在相同的解法上時。
- 當需要計算一些總和且計算的方式都相同時。
- 當每個小問題可以結合來解決一個大問題的時候。
2,3,4點可以總結成Divide and Conquer的問題能利用Recursion解決。
所有可以利用recursion實作的例子都可以用loop解決。Ex:Merge Sort, Quick Sort, Tree Traversal, Graph Traversal。
Exercise:Reverse String
1 | function reverseString(str) { |