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

C語言遞歸實現:陣列最大值查找

     編輯:關於C語言

遞歸思路

陣列最大值 = max(首元素, 剩餘陣列最大值)。基礎情況:陣列長度為 1 時直接回傳該元素。

修正後完整代碼

#include <stdio.h>

int GetMax(int arr[], int n) {
    if (n == 1) return arr[0];                 // 基礎情況
    int max_rest = GetMax(arr + 1, n - 1);     // 遞歸處理剩餘
    return (arr[0] > max_rest) ? arr[0] : max_rest;
}

int main() {
    int arr[5];
    printf("請輸入 5 個整數: ");
    for (int i = 0; i < 5; i++) scanf("%d", &arr[i]);
    printf("最大值: %d\n", GetMax(arr, 5));
    return 0;
}

原始碼問題分析

  • int Getmax(int arr[n]):C 不支援 VLA 作為參數型別,應為 int arr[] 或 int *arr。
  • for(int i=0;i:逗號運算子誤用,且迴圈邏輯與遞歸衝突。
  • Getmax(arr[]+1,n-1):語法錯誤,正確寫法 arr+1 或 &arr[1]。
  • max=Getmax(arr[5]):傳遞單一元素而非陣列指標。

遞歸 vs 迴圈對比

特性遞歸迴圈
可讀性直觀符合數學定義需手動維護狀態
空間複雜度O(n) 堆疊幀O(1)
效能函數呼叫開銷極快
適用場景教學、分治、樹圖遍歷簡單線性掃描

尾遞歸優化提示

若編譯器支援尾呼叫優化(GCC -O2),可改寫為尾遞歸形式避免堆疊增長:

int GetMaxTail(int arr[], int n, int current_max) {
    if (n == 0) return current_max;
    int new_max = (arr[0] > current_max) ? arr[0] : current_max;
    return GetMaxTail(arr+1, n-1, new_max);
}
// 呼叫: GetMaxTail(arr, 5, arr[0])

遞歸是程式設計的核心思維工具,掌握基礎情況、遞歸步驟與縮減問題規模三要素,即可解決許多複雜問題。

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