在使用遞歸的時(shí)候精堕,需要記住以下技巧:
- 確認(rèn)遞歸能夠停止
- 使用安全計(jì)數(shù)器防止出現(xiàn)無窮遞歸
- 把遞歸限制在一個(gè)子程序內(nèi)
- 留心椃跆裕空間
- 不要用遞歸去計(jì)算階乘或者斐波那契數(shù)列
在使用表驅(qū)動(dòng)法的時(shí)候,必須解決兩個(gè)問題歹篓。首先瘫证,你必須要回答怎樣從表中查詢條目的問題。你可以用一些數(shù)據(jù)來直接訪問表庄撮。第二個(gè)問題是背捌,你應(yīng)該在表里面存些什么。有的時(shí)候洞斯,表查出來的結(jié)果是數(shù)據(jù)毡庆。在這種情況下,可以把這些數(shù)據(jù)存放在表中烙如。在另外一些情況下么抗,表查詢出來的結(jié)果是動(dòng)作。在這種情況下亚铁,可以保存一個(gè)描述該動(dòng)作的代碼蝇刀,或者可以保存對(duì)實(shí)現(xiàn)該動(dòng)作的子程序的引用。
請(qǐng)?jiān)诓紶柋磉_(dá)式的判斷里采用true和false來代表真和假徘溢。如果你的語言并不直接支持這些寫法吞琐,那么就用預(yù)處理宏或者全局變量來創(chuàng)建它們捆探。把表達(dá)式當(dāng)作布爾表達(dá)式,可以寫出更清晰的判斷語句站粟。
與其寫一個(gè)龐大的黍图、具有很多項(xiàng)的復(fù)雜判斷,還不如把中間結(jié)果賦給變量奴烙,讓你可以執(zhí)行一個(gè)更簡(jiǎn)單的判斷助被。有時(shí)候一個(gè)很復(fù)雜的判斷,其中涉及多個(gè)變量切诀,這時(shí)用一個(gè)決策表代替if或者case語句來執(zhí)行判斷可能非常有幫助恰起。
如果你有一個(gè)復(fù)雜的布爾表達(dá)式,那么與其依賴于所用語言的求值順序趾牧,不如用括號(hào)更清楚地表達(dá)你的意圖。括號(hào)用起來很方便肯污,而且能夠改善可讀性翘单。在實(shí)踐中,把布爾表達(dá)式整個(gè)括在括號(hào)里是一種很好的習(xí)慣蹦渣。
Java中的 & 和 | 邏輯運(yùn)算符會(huì)保證哄芜,無論整個(gè)表達(dá)式的結(jié)果能否通過部分項(xiàng)的真假判定而無需完全求值,所有的項(xiàng)都要經(jīng)過完整的求值柬唯。這是與 && 和 || 不同的地方认臊,也就是 & 和 | 不會(huì)利用短路求值。
結(jié)構(gòu)化編程的中心論點(diǎn)是锄奢,任何一種控制都可以由順序失晴、選擇和迭代這三種結(jié)構(gòu)生成。程序員有時(shí)候會(huì)傾向于使用那些更方便的語言結(jié)構(gòu)拘央,但是編程這一領(lǐng)域卻似乎更多地在對(duì)我們能用編程語言做些什么加以限制的過程中取得發(fā)展的涂屁。