調查局三等申論題
110年
[電子科學組] 計算機概論
第 一 題
📖 題組:
請回答下列問題:
請回答下列問題:
📝 此題為申論題,共 2 小題
小題 (一)
假設 y 的值為 0 情況下,執行以下函數,請問輸出結果為何?(8 分)
def F(y):
print(y)
if(y < 2):
F(y + 1)
else:
print(y)
print(y)
思路引導 VIP
看到遞迴(Recursion)考題,首先聯想「系統堆疊(System Stack)」的後進先出(LIFO)特性。解題時務必逐層展開函數呼叫,並精確標記「遞迴呼叫前」、「終止條件(Base Case)」與「遞迴返回後(回溯)」的每一行輸出,切忌心算跳步。
小題 (二)
請問以下程式,輸出結果為何?(8 分)
#include
using namespace std;
unsigned long long int fun(unsigned int n)
{
unsigned long long int x = 0;
unsigned long long int y = 1;
for (unsigned int j = 2; j <= n; ++j){
if (j % 2 == 0) x += y;
else y += x;
}
if(n % 2 == 0) return x;
else return y;
}
int main(){
int x = 5, y = 7;
cout << fun(x) << endl;
cout << fun(y);
}
思路引導 VIP
面對程式追蹤題,應優先建立「變數狀態追蹤表(Trace Table)」,逐圈記錄條件分支下的數值變化。觀察變數 x 與 y 交替相加的模式,可敏銳察覺此演算法實為計算費氏數列(Fibonacci Sequence)第 n 項之變形實作。