今天在力扣刷題時遇到了一個斐波拉切數列問題,題目是這樣的:
看完題目後發現規律是:一、一、二、三、五、八、13。第一發反應就想到了遞歸的實現方案,邊用下面代碼進行提交:編程
var climbStairs = function (n) { if (n === 1 || n === 2) return n; return climbStairs(n - 1) + climbStairs(n - 2); };
可是事與願違,竟然未經過-超出時間限制,而後想了半天,想到了另外一種解決方案,提供參考:學習
var climbStairs = function (n) { let arr = [1, 1]; for (let i = 2; i <= n; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } return arr[n]; };
此次終於經過了,遞歸雖然在編程中很經常使用也很重要,可是有些時候用非遞歸的方法實現,能夠讓代碼有更高的執行效率,可是這樣寫效率還不是特別高,小夥伴有好的方法求留在評論區,共勉學習。spa