二、請問下列程式碼之輸出結果為何? 

詳解 (共 1 筆)
#include <stdio.h> #include <stdlib.h>
int function(int num);
int main() { int var1 = 1; int sum = 0; for (var1 = 1; var1 <= 9; var1++) { sum += function(var1); if (var1 == 3) { printf("output1:%d\n", function(var1)); } } printf("output2:%d", sum); return 0; }
int function(int input) { if (input == 9) return 1; return 2 * function(input + 1); }
我們可以看到,main 函數中有一個迴圈,var1 從1迭代到9。在每次迴圈中,它會呼叫 function(var1),並將結果加到 sum 變數中。此外,當 var1 等於3時,會輸出 function(var1) 的結果。迴圈結束後,會輸出 sum 的結果。
我們現在來分析 function(int input) 函數。這是一個遞迴函數:
當 input 等於9時,函數返回1。否則,它會返回 2 * function(input + 1)。
我們從 input = 1 開始計算遞迴:
- function(1):
- 2 * function(2)
- function(2):
- 2 * function(3)
- function(3):
- 2 * function(4)
- function(4):
- 2 * function(5)
- function(5):
- 2 * function(6)
- function(6):
- 2 * function(7)
- function(7):
- 2 * function(8)
- function(8):
- 2 * function(9)
- function(9):
- 返回1
現在,我們可以往回推導出每個函數調用的結果:
- function(9) = 1
- function(8) = 2 * 1 = 2
- function(7) = 2 * 2 = 4
- function(6) = 2 * 4 = 8
- function(5) = 2 * 8 = 16
- function(4) = 2 * 16 = 32
- function(3) = 2 * 32 = 64
- function(2) = 2 * 64 = 128
- function(1) = 2 * 128 = 256
因此,當 var1 等於3時,function(3) 的輸出是64。所以,output1 是64。
在整個迴圈中,sum 會累加這些值:
- sum = 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 511
所以,最終的 output2 是511。
總結: