
[數] 遞歸函數
Next, you'll create a recursive function.
接下來,創建遞歸函數。
How can I serialise a recursive function?
我怎麼能連續的遞歸函數?
How to write a recursive function for this?
如何編寫一個遞歸函數嗎?
You've implemented a recursive function in Lisp.
您已經在Lisp中實現了遞歸函數。
Converting a common loop to a recursive function.
将一個常見的循環轉化為遞歸函數。
遞歸函數(Recursive Function) 是指一種在計算機科學和數學中廣泛使用的函數定義方式,其核心特征是函數在執行過程中直接或間接地調用自身。這種函數通過将複雜問題分解為結構相似但規模更小的子問題來求解,直至達到一個可立即解決的簡單情況(稱為基線條件或遞歸終止條件)。
自我調用(Self-Referential)
函數在其定義中包含對自身的調用。例如,計算階乘的函數 ( n! ) 可定義為: $$ text{factorial}(n) = begin{cases} 1 & text{if } n = 0 quad text{(基線條件)} n times text{factorial}(n-1) & text{if } n > 0 quad text{(遞歸步驟)} end{cases} $$
基線條件(Base Case)
必須存在一個或多個無需遞歸即可直接返回結果的場景,否則函數會無限循環導緻棧溢出。例如,階乘中 ( n=0 ) 時返回 1。
遞歸步驟(Recursive Step)
将問題轉化為規模更小的同類子問題,并調用自身解決。例如,( text{factorial}(n) ) 通過調用 ( text{factorial}(n-1) ) 逐步逼近基線條件。
遞歸函數依賴調用棧(Call Stack) 管理執行狀态:
def fibonacci(n):
if n <= 1:# 基線條件:n=0 或 n=1
return n
else: # 遞歸步驟:分解為兩個子問題
return fibonacci(n-1) + fibonacci(n-2)
遞歸函數體現了“分而治之”的思想,是算法設計的核心範式之一。其權威定義可參考計算機科學經典教材如《算法導論》(Cormen et al.)或學術資源如 GeeksforGeeks 的遞歸算法專題。
遞歸函數(recursive function)是一種在定義中直接或間接調用自身的函數。它通過将複雜問題分解為更小的同類子問題來逐步求解,通常包含兩個關鍵部分:基線條件(base case)和遞歸步驟(recursive step)。
基線條件
遞歸終止的條件,防止無限循環。例如,計算階乘時,定義 0! = 1
作為基線條件。
遞歸步驟
将問題拆解為更小的同類問題。例如,階乘的遞歸公式為:
$$
n! = n times (n-1)! quad text{(當 } n > 0 text{ 時)}
$$
例如,Python中計算階乘的遞歸函數:
def factorial(n):
if n == 0:# 基線條件
return 1
else: # 遞歸步驟
return n * factorial(n-1)
遞歸函數通過自我調用來簡化問題,但需謹慎設計基線條件和遞歸邏輯,避免性能問題。
【别人正在浏覽】