Ruby中遞歸層數(shù)好像有限制,如函數(shù)
def test(a)
?? if a==1
???? 1
?? else
???? a*test(a-1)
?? end
end?
puts test(780)
輸出:84972392897964072098249533940415832032901226147549483885937628906393387016759749166779390912108512193770727396731176148684817099219862241070518329897737419790700834153338358789804054247254662503406001643932256413944181262536626134781963753899870200241216683120301369375204827350328695627459108294334206019027913654171970749305552969884823232609436511764040695691647958710090181422374514248844937618454949350242415512115167050621676322866110695044767187626021475743251277035950696737988473189355598223688184822894258942937354547600827689072340880783574157611601536909313655637665907495308227315772813753604514703047972667545052382993341295609886125445821680344472136291787954204104578202488733326674486963013530280156726975853827440416172311405531398732685573114934257635906047009853269995109193159402626590282423997495520628272375213203911332399362264123774789131108251376802391556145557618075940012872003438523613025838162437433166091728438034202592564763334170361422871174553523479072202135150477947497462319792004248488747067669226929977889728474667753117513554197181549148693463434107347395476738175071015937790196691810903035212156632705787120639270121315037723516623976522946189161132382463371686857543746042274574224547052957738646625809966919808812294116127379399188579075359032740380579901160073141745025441935558361164158736914927029701136227557285045299271693750581590882877670856450852068994081414494717924806473008367067880435766156267541200120373117672789242005510204657433232442062443350842731528466220850546079536126591907570634996939687881634634077903962785409702209303560414980140946811644475359177263347973998479963954822343870777236845722878913093643097703061981548194975005332841862304172509388532508262400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
而
puts test(781)
輸出:
E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `*': stack level too deep (SystemStackError)
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
?... 727 levels...
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:5:in `test'
from E:/eclipse-SDK-3.2M6-win32/workspace/testruby/Test5.rb:9
3年前讀《人月神化》,當(dāng)時(shí)并沒有什么特別深的體會(huì),只是記住了關(guān)于狼人的傳說。
幾年過去了,在實(shí)踐中,我一次又一次地把系統(tǒng)中的癥結(jié)往深處考慮,竟然發(fā)現(xiàn)它們不約而同地指向同一個(gè)根源:沒有銀彈!
一個(gè)非常樸素又普遍存在的理論,使我多次從困惑中跳出。
略列以下幾條:
1.不要企圖實(shí)現(xiàn)一個(gè)全息系統(tǒng)。
實(shí)例:權(quán)限模塊在任何系統(tǒng)中需要,如果能建立一個(gè)完備的權(quán)限系統(tǒng),將可以在很多系統(tǒng)中使用。
無論時(shí)間多么充足,這樣的模塊都無法完成。并不是這個(gè)系統(tǒng)過于復(fù)雜,而是因?yàn)槲覀冇?jì)劃實(shí)現(xiàn)的是一個(gè)全息的系統(tǒng),它是連續(xù)的,而軟件系統(tǒng)是離散的,無法用一個(gè)離散的系統(tǒng)實(shí)現(xiàn)一個(gè)連續(xù)的系統(tǒng),可以使用多種方法來模擬,但是絕不可能真正實(shí)現(xiàn)一個(gè)連續(xù)的系統(tǒng)。
2.分析模式的使用
分析模式是前人對(duì)某一具體領(lǐng)域的歸納總結(jié)。但如果真的在分析過程中想把分析模式用到極致,就會(huì)發(fā)現(xiàn)自己已經(jīng)走上了絕路。想適應(yīng)所有的變化,想用一個(gè)系統(tǒng)解決這個(gè)領(lǐng)域中所有的問題,這是不可能的。
好久沒抽煙,一支煙竟然是我有點(diǎn)暈了,睡了先。