不常見的控制結構retrun goto 遞迴

2021-09-13 11:22:39 字數 1642 閱讀 3469

return語句放入迴圈的指導原則:如果能增強**的可讀性就是用return,用防衛子句來簡化複雜的錯誤處理

混亂的**,遮蓋了正常執行路徑:

if(file.validname())

}}

使用防衛子句,澄清正常路徑的**:

if(file.validname())

if(file.open())

if(encrypyionkey.valid())

losts of code

遞迴:當問題的小部分很容易解決,而問題又很容易分解成眾多的小部分時,常常會用到遞迴。對於小範圍的問題,使用遞迴會帶來簡單、優雅的解,對於大多數問題,它所帶來的解將會是極其複雜的,使用簡單的迭代通常會比較容易理解。

遞迴的例子:

boolean function findpaththroughmaze ( maze_t maze , point position )

使用遞迴的技巧:

1、確認遞迴能夠停止:有判斷遞迴退出的語句

2、使用安全計數器防止出現無窮遞迴:在子程式中如果超出了遞迴呼叫次數安全上限,就強制退出

3、留心棧空間:防止出現棧越界

4、不要用遞迴去計算階乘或者斐波納契數列:使用for迴圈簡單的,就不要去使用遞迴

1、使用多種程式設計方式替代goto:

(1)巢狀使用if語句

(2)用乙個狀態標誌位重寫**:每執行一小段**都需要去判斷標誌位,如果標誌位和初始化時不一樣了,那麼後面的**就不執行了,一直到錯誤處理的時候再執行。

(3)在編寫**時一定不要相同**重複寫多次,可以修改if檢測條件,想辦法讓他們執行在一起。

2、使用goto的注意事項

(1)如果沒有return的話,goto 也會順序執行下去

(2)goto應該盡可能的不去使用,使用其他方式代替;即便是必須去使用,在乙個子程式中最好只使用一次。

goto

· goto 是最後的選擇嗎?用 goto 使程式更好讀更好維護嗎?

· 用 goto 是為效率的目的嗎?用 goto 達到此目的了嗎?

· 乙個程式是否只用乙個 goto 呢?

· goto 只轉向前面的程式段而不是轉向其後面的程式段嗎?(後面指已執行過程式)

· goto 所轉向的標號都有了嗎?

return

· 每個子程式的 return 數目是否最少?

· return 增強了可讀性了嗎?

遞迴呼叫

· 用遞迴呼叫的**含使遞迴結束的語句嗎?

· 程式設定了安全計數器來保證遞迴呼叫終止了嗎?

· 是否只在乙個程式中用遞迴呼叫?

· 遞迴呼叫的深度是否限制在程式堆疊容量可滿足的條件下?

· 遞迴呼叫是實現程式的最優途徑嗎?它比迴圈更簡單嗎?

1、多個return可以增強子程式的可讀性和可維護性,同時可以避免產生很深的巢狀邏輯。但是使用它的時候要多加小心。

2、遞迴可以優雅的解決一小部分問題,對它的使用也要加倍小心。

3、在少數情況下,goto是編寫可讀性和可維護性**的最佳方法,但這種情況非常罕見。除非萬不得已,否則不要使用goto。

不常見的函式

不常見的函式 1.strstr 返回字串str中第一次出現子串substr的位址,如果沒有檢索到子串,返回null。2.sscanf 3.abort 4.strcmp 5.qsort 6.fflush 函式名 fflush 功 能 清除讀寫緩衝區,立即把輸出緩衝區的資料進行物理寫入 標頭檔案 std...

不常見的解密(解碼)

quoted printable可譯為 可列印字元引用編碼 編碼常用在電子郵件中,如 content transfer encoding quoted printable 它是mime編碼常見一種表示方法!在郵件裡面我們常需要用可列印的ascii字元 如字母 數字與 表示各種編碼格式下的字元!quo...

幾種有趣的不常見排序

幾種有趣的不常見排序演算法 我們常見的排序演算法有簡單選擇,冒泡,插入,兩路合併,希爾,堆,快速排序等等,下面介紹幾種不常見的排序演算法。雞尾酒排序 雞尾酒排序是氣泡排序的微調演算法。我們還記得,氣泡排序是每次遍歷整個序列,把較大的 我們這裡假設公升序排序 交換到後面。雞尾酒排序在交換到後面後,再逆...