开始学习golang,写的一个打印前100个斐比那契数的小程序,但是编译后运行居然巨卡,到30后就十分卡顿,cpu使用99%,但是我的code应该没有问题,不知道原因是什么,ps:C语言1、2秒就输出了。packagemainimport"fmt"funcfib(nint)int{ifn
2 回答
吃鸡游戏
TA贡献1829条经验 获得超7个赞
单步调试发现递归的效率太慢了。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优势还是蛮大的
添加回答
举报
0/150
提交
取消