首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言函數遞歸呼叫:階乘計算與迭代替代方案

     編輯:C 語言基礎

函數在函數體內呼叫自身稱為遞歸呼叫,此類函數稱遞歸函數。每次呼叫進入新層級,需有終止條件避免無限遞歸。

範例:遞歸計算階乘 n!

long factorial(int n) {
    long result;
    if (n == 0 || n == 1) result = 1;
    else result = factorial(n-1) * n; // 遞歸呼叫
    return result;
}

呼叫 factorial(5):

  1. 遞歸 4 次至 factorial(1) 終止
  2. 逐層返回:1 → 2 → 6 → 24 → 120

遞歸缺點與迭代替代

  • 難理解、開銷大(棧框分配、參數傳遞、返回地址保存)。
  • 非必要不推薦,多數可用迴圈(迭代)替代。
long factorial(int n) {
    if (n == 0 || n == 1) return 1;
    long result = 1;
    for (int i = 1; i <= n; i++) result *= i;
    return result;
}

深度理解遞歸開銷

請參閱《C 語言與記憶體》專題中「棧概念與棧溢出」、「函數棧框結構」、「函數進棧出棧詳細分析」章節,將徹底明白遞歸為何開銷大。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved