const fib1 = n => )`)
if (n === 0) else if (n === 1) else
}console.log(fib1(5))
// 函式呼叫順序
// fib1(5) fib1(4) fib1(3) fib1(2) fib1(1) fib1(0) fib1(1) fib1(2) fib1(1) fib1(0) fib1(3) fib1(2) fib1(1) fib1(0) fib1(1)
可以發現整個過程是二叉樹先序遍歷的過程。此外,整個過程中多次呼叫了fib1(3)
、fib1(2)
、fib1(5)
,產生大量冗餘的呼叫。無路什麼資料結構最後都是隊棧嗎?
一行寫出斐波那契數列
const fib1 = n => (n <= 1) ? n : (fib1(n - 1) + fib1(n - 2))
將找到斐波那契數列的第n項問題轉化為在乙個初始項為t0和t1的加法序列(序列中,每一項都是前兩項的和)中找到第n項的問題。
求以3和7為初始項的第乙個序列中的t6(71)可以轉化為求以7和10為初始項的第二個序列中的t5(71)
const fib2 = n =>
const additivesequence = (n, t0, t1) => ,$,$)`)
if (n === 0) else if (n === 1) else
}console.log(fib2(5))
// additivesequence(5,0,1)
// additivesequence(4,1,1)
// additivesequence(3,1,2)
// additivesequence(2,2,3)
// additivesequence(1,3,5)
求以3和7為初始項的第乙個序列中的t6(71)可以轉化為求以10和17為初始項的第二個序列中的t4(71)
const fib3 = n =>
const additivesequence = (n, t0, t1) => ,$,$)`)
if (n === 0) else if (n === 1) else
}console.log(fib3(5))
// additivesequence(5,0,1)
// additivesequence(3,1,2)
// additivesequence(1,3,5)
遞迴 斐波那契
題 若一頭小母牛,從出生起第四個年頭開始每年生一頭母牛,按此規律,第n年有多少頭母牛?具體分析 1 分析題目 從出生起第四個年頭開始每年生一頭母牛 時間 年 未成熟母牛 頭 成熟母牛 頭 母牛總數 頭 1 1 0 1 2 1 0 1 3 1 0 1 4 0 1 1 5 1 1 2 6 2 1 3 7...
遞迴優化 斐波那契
f n f n 1 f n 2 1,2,3,5,8.自頂向下使用的遞迴層次比較多,在n取值較大的情況下,效率很低 時間維度 所以可以使用陣列來替換多重遞迴呼叫,即以空間來置換時間 intersting include include include include include include d...
遞迴 斐波那契 兔子
斐波那契數列的排列是 0,1,1,2,3,5,8,13,21,34,55,89,144 依次類推下去。觀察後發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。遞迴思想 乙個數等於前兩個數的和。package com.autumn 斐波那契數列的排列 0,1,1,2,3,5,...