不常見的控制結構
1.子程序中的多處返回
- 如果能增強可讀性,那麼就使用return
- 用防衛子句(早返回或早退出)來簡化複雜的錯誤處理
- 減少每個子程序中return的數量
2.遞歸
在遞歸裏面,一個子程序自己負責解決某個問題的一小部分,它還把問題分解成很多的小塊,然後調用自己來分別解決每一小塊。
對於某一小範圍內的問題,使用遞歸會帶來簡單、優雅的解。在稍大一些範圍裏,使用遞歸會帶來簡單、優雅但是難懂的解。對於大多數問題,它所帶來的解將會是極其複雜的——在那些情況下,使用簡單的迭代通常會比較容易理解。因此要有選擇地使用遞歸。
1)使用遞歸的技巧
- 確認遞歸能夠停止
- 使用安全計數器防止出現無窮遞歸
- 把遞歸限制在一個子程序內
- 留心棧空間
- 不要用遞歸去計算階乘或者斐波納契數列
3.goto
對於goto,人們總是持兩種觀點:反對和支持。用不用goto是一個信仰問題。我的信條是,在現代語言裏,你可以很容易地把九成的goto替換成與之等價的順序結構。對於這些簡單的情況,你應該把goto替換掉並把這當成習慣。對於複雜的情況,你仍有九成不用goto的可能:你可以把代碼拆分成小的子程序,使用try-finally,使用嵌套if,檢測並重新檢測某個狀態變量,或者重新設置條件結構。對於這些情況,想消除goto相對來說比較困難,但這是一種很好的智力訓練。
4.針對不常見控制結構的觀點