阿摩線上測驗 登入

申論題資訊

試卷:103年 - 103 地方政府特種考試_四等_資訊處理:程式設計概要#30783
科目:程式設計
年份:103年
排序:0

申論題內容

請問下列函式,f2(0, 3)的輸出為何?(5 分)
int f2(int x, int y) {
if (x > 5) return (y+1);
else if (x > 3) return 3 + f2(x+1, y+1);
else return 1 + f2(x+1, y);
}

詳解 (共 4 筆)

詳解 提供者:我愛阿摩,阿摩愛我2
請問這題該看哪邊呢? 卡住了~~
詳解 提供者:yumei Lin
我也想知道 有人能提醒我嗎

詳解 提供者:hchungw
這個結果來自於遞歸調用過程中每次根據x的值增加不同的數值(無論是直接增加1或是進入條件分支增加更多),直到達到終止條件x > 5。此時,每一層遞歸返回的值基於y的變化以及是否進入else if條件分支,導致最終累加結果為16。
 
初始調用f2(0, 3),其中x=0,y=3。由於x不大於5,函式進入遞歸,直到x增加到大於5。遞歸過程如下:
第一次遞歸:f2(0, 3) -> 1 + f2(1, 3)
第二次遞歸:f2(1, 3) -> 1 + f2(2, 3)
第三次遞歸:f2(2, 3) -> 1 + f2(3, 3)
第四次遞歸:f2(3, 3) -> 1 + f2(4, 3)
第五次遞歸:f2(4, 3) -> 3 + f2(5, 4),在這一步,x首次大於3,因此返回值增加3,且y增加1。
第六次遞歸:f2(5, 4) -> 1 + f2(6, 4),再次返回1,且進入最後一層遞歸。
最終遞歸達到終止條件:f2(6, 4)滿足x > 5,返回y+1,即4+1=5。
這些返回值按遞歸解開的順序累加:
從最深層遞歸返回5。
向上一層加1,得到6。
因為在x=4時進入else if分支,所以向上一層加3而不是1,得到9。
隨後每一層都直接加1,直到返回到最初的調用。
整個過程的累加過程是:1 + 1 + 1 + 1 + 3 + 1 + 5 = 16。
因此,遞歸調用過程中基於x的條件檢查和對應的y值變化,導致了最終輸出為16。
詳解 提供者:Hung

請問這段 f2(4,3)=3+f2(5,4) 這段怎麼來的呢?