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

PHP 遞迴函數返回值使用方法淺析

     編輯:PHP 綜合知識

PHP 遞迴函數返回值核心原則

遞迴函數若需返回值,每一層遞迴呼叫都必須以 return 傳遞。遺漏任何一層 return 都會導致最終返回 null。

錯誤與正確對照

<?php
// 錯誤:遞迴呼叫未 return
function testWrong($i) {
    $i -= 4;
    if ($i < 3) {
        return $i;
    } else {
        testWrong($i); // 缺少 return
    }
}

// 正確:每層都 return
function testCorrect($i) {
    $i -= 4;
    if ($i < 3) {
        return $i;
    } else {
        return testCorrect($i); // 關鍵 return
    }
}

var_dump(testWrong(30));  // NULL
var_dump(testCorrect(30)); // int(-2)

為什麼會這樣?

  1. PHP 函數若無 return 或執行到結尾,隱性返回 null。
  2. 遞迴到基礎情況時 return $value,值返回給直接呼叫者。
  3. 若直接呼叫者未寫 return,它收到值後不做任何事,函數結束返回 null。
  4. 層層向上,最終最外層呼叫者拿到的就是 null。

記憶口訣

「遞迴呼叫前面一定要加 return,除非你真的不需要返回值。」

進階:多遞迴分支合併返回

<?php
// 二元樹尋找節點,找到返回節點,未找到返回 null
function findNode($node, $targetId) {
    if (!$node) return null;
    if ($node->id === $targetId) return $node;
    
    // 左子樹找到直接返回,否則找右子樹
    $left = findNode($node->left, $targetId);
    if ($left) return $left;
    
    return findNode($node->right, $targetId); // 這裡的 return 不可少
}

除錯技巧

<?php
function debugRecursive($param, $depth = 0) {
    $indent = str_repeat('  ', $depth);
    error_log("{$indent}→ CALL: " . json_encode($param));
    
    if (isBase($param)) {
        $result = compute($param);
        error_log("{$indent}← RETURN: " . json_encode($result));
        return $result;
    }
    
    $next = transform($param);
    $result = debugRecursive($next, $depth + 1);
    error_log("{$indent}← RETURN: " . json_encode($result));
    return $result;
}

掌握此原則,遞迴函數返回值問題將不再困擾。

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