阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 普通考試_資訊處理:程式設計概要#115544
科目:程式設計
年份:112年
排序:0

題組內容

二、根據以下C程式碼,回答下列問題:
64b0a075bcee8.jpg

申論題內容

(三)請說明第11行的輸出,以及其運作邏輯。 (7分)

詳解 (共 1 筆)

詳解 提供者:hchungw
根據代碼,第11行執行了printf("%d\n", f(0, 0));,這裡調用了函數f,傳遞參數0和0。
函數f的定義是一個遞迴函數。但是,此處有一個問題:函數f在處理b == 1的情況時返回a,否則會嘗試進行遞迴呼叫f(a, b-1)。在f(0, 0)的調用中,b不是1,所以函數會進入else分支,並嘗試調用f(0, -1)。這將導致無限遞迴,因為b的值永遠不會達到1,遞迴沒有明顯的結束條件。
在大多數程式設計環境中,這會導致堆疊溢位錯誤,因為每次遞迴呼叫都會消耗一定的棧空間,而棧空間是有限的。但是,這種行為是未定義的,因為C語言標準沒有定義這種情況的行為。
由於這裡使用的是C語言,這段代碼將會造成未定義行為,因此在不同的編譯器或運行時環境中可能會有不同的輸出。實際上,這通常會導致執行階段錯誤。由於這裡我們無法運行C代碼,我們無法提供一個準確的輸出結果。在實際的C環境中,運行f(0, 0)很可能會導致程式崩潰。