<!--introduction--> # 11/15 第十堂社課 ## 今日講師:R緯 #### (Python班) --- # 今日課程主題: ---- # 遞迴 (Recursion) ---- # 歡樂觀念題time ---- # 歡樂題目time --- # 遞迴 (Recursion) ---- ## 什麼是遞迴? 遞迴是一種函數調用自身的編程方法。 #### 特點: * 每次調用會處理一部分問題。 * 發生基礎情況(base case)就終止遞迴。 [重複結構-講義](https://hackmd.io/1jd4I8pUReiwyrQQd-uzuA#4-%E9%81%9E%E8%BF%B4-Recursion) ---- 遞迴的結構 ```python= def recursive_function(parameters): if base_case_condition: return base_case_value else: return recursive_function(modified_parameters) ``` ---- 舉例#1 用迴圈&遞迴計算階乘 ---- 迴圈 ```python= def factorial_iterative(n): result = 1 for i in range(1, n + 1): # 從 1 到 n result *= i # 累乘 return result # 使用迴圈計算階乘 result_iterative = factorial_iterative(int(input())) print(result_iterative) ``` ---- 遞迴 ```python= def factorial_recursive(n): if n == 0: # 基礎情況 return 1 else: return n * factorial_recursive(n - 1) # 遞迴調用 result_recursive = factorial_recursive(int(input())) print(result_recursive) ``` ---- ## 比較迴圈&遞迴 ---- 迴圈 ```python= def factorial_iterative(n): result = 1 for i in range(1, n + 1): # 從 1 到 n result *= i # 累乘 return result # 使用迴圈計算 5 的階乘 result_iterative = factorial_iterative(5) print(result_iterative) # 輸出: 120 ``` ---- 迴圈過程: 1. 初始化 $\texttt{result}$ 為 1 1. 迴圈從 1 到 5: 1. 當 $\texttt{i}$ = 1,$\texttt{result}$ = $1 * 1$= 1 1. 當 $\texttt{i}$ = 2,$\texttt{result}$ = $1 * 2$ = 2 1. 當 $\texttt{i}$ = 3,$\texttt{result}$ = $2 * 3$ = 6 1. 當 $\texttt{i}$ = 4,$\texttt{result}$ = $6 * 4$ = 24 1. 當 $\texttt{i}$ = 5,$\texttt{result}$ = $24 * 5$ = 120 1. 最終返回 $\texttt{result}$,即 120 ---- 遞迴 ```python= def factorial_recursive(n): if n == 0: # 基礎情況 return 1 else: return n * factorial_recursive(n - 1) # 遞迴調用 # 使用遞迴計算 5 的階乘 result_recursive = factorial_recursive(5) print(result_recursive) # 輸出: 120 ``` ---- 遞迴過程: 1. f(5) 調用 f(4) 1. f(4) 調用 f(3) 1. f(3) 調用 f(2) 1. f(2) 調用 f(1) 1. f(1) 調用 f(0) 1. f(0) 返回 1 然後逐步返回計算結果: f(1) 返回 1、f(2) 返回 2、f(3) 返回 6、 f(4) 返回 24、f(5) 返回 120 ---- ### 總結 遞迴: * 代碼簡潔。 * 調用函數,直到基礎情況。 * 可能堆疊溢出,特別是大數字。 迴圈: * 代碼較長,但效率較高。 * 使用變量來累計結果。 * 不會導致堆疊溢出。 --- # 歡樂apcs觀念題time (一題平均3分鐘) ---- [題目區](https://github.com/olivertzeng/homework/blob/main/latex/apcs.pdf) [作答區](https://forms.gle/pydUnzwX3GopYyFEA) --- # 歡樂題目time ---- 例題#1 --- # END
{"title":"11/15 第十堂社課","description":"(function)","contributors":"[{\"id\":\"d967ff96-64ae-417e-a28e-73566bf5eb84\",\"add\":2629,\"del\":214}]"}
    58 views