單步調試發現遞歸的效率太慢了。fib(100)算了幾百萬次。遞歸算法(以計算fib(10)為例)+fib(10)=fib(9)+fib(8)+fib(9)=fib(8)+fib(7)//...可以發現在fib(10)和fib(9)的時候fib(8)被重復計算了。用了一種比較笨的方法,效率還可以。packagemainimport"fmt"funcfib(nuint64)uint64{callTime:=0ifn==0{return0}ifn==1{return1}var(firstuint64=0seconduint64=1resultuint64=0cursoruint64=1)forcursorcallTime++fmt.Println("fib",callTime)result=first+secondfirst=secondsecond=resultcursor++}returnresult}var(callTime=0)funcfib2(nint)int{callTime++fmt.Println("fib2",callTime)ifn<=0{return0}ifn==1{return1}returnfib2(n-1)+fib2(n-2)}funcmain(){fib(10)fib2(10)}終端輸出fib1fib2fib3fib4fib5fib6fib7fib8fib9fib21fib22fib23fib24fib25fib26fib27fib28fib29fib210fib211fib212fib213fib214fib215fib216fib217fib218fib219fib220fib221fib222fib223fib224fib225fib226fib227fib228fib229fib230fib231fib232fib233fib234fib235fib236fib237fib238fib239fib240fib241fib242fib243fib244fib245fib246fib247fib248fib249fib250fib251fib252fib253fib254fib255fib256fib257fib258fib259fib260fib261fib262fib263fib264fib265fib266fib267fib268fib269fib270fib271fib272fib273fib274fib275fib276fib277fib278fib279fib280fib281fib282fib283fib284fib285fib286fib287fib288fib289fib290fib291fib292fib293fib294fib295fib296fib297fib298fib299fib2100fib2101fib2102fib2103fib2104fib2105fib2106fib2107fib2108fib2109fib2110fib2111fib2112fib2113fib2114fib2115fib2116fib2117fib2118fib2119fib2120fib2121fib2122fib2123fib2124fib2125fib2126fib2127fib2128fib2129fib2130fib2131fib2132fib2133fib2134fib2135fib2136fib2137fib2138fib2139fib2140fib2141fib2142fib2143fib2144fib2145fib2146fib2147fib2148fib2149fib2150fib2151fib2152fib2153fib2154fib2155fib2156fib2157fib2158fib2159fib2160fib2161fib2162fib2163fib2164fib2165fib2166fib2167fib2168fib2169fib2170fib2171fib2172fib2173fib2174fib2175fib2176fib2177可以看到算法1優勢還是蠻大的