函數遞歸原理:函數調用自身(自引用)。每次調用參數變化。持續遞歸,直至滿足遞歸條件(停止條件)。函數遞歸應用:簡化復雜問題(分解成子問題)。簡潔代碼(更優雅)。案例:計算階乘(分解為乘積)。查找樹中節點的祖先(遍歷遞歸尋找)。
PHP 函數遞歸調用的原理和應用
什么是函數遞歸
函數遞歸是指函數在調用自身的一種自引用特性。當一個函數在自身內部調用時,稱之為遞歸調用。
遞歸的原理
-
函數調用自身。
在遞歸調用中,函數的參數會發生變化。
遞歸過程會持續進行,直到達到遞歸條件。
遞歸條件滿足后,函數會停止遞歸,返回結果。
遞歸的優勢
解決復雜問題:遞歸可以將復雜的問題分解成更小的子問題,從而簡化解決方案。
代碼簡潔:遞歸代碼通常比非遞歸代碼更簡潔、優雅。
應用案例
1. 計算階乘
function factorial($number) { if ($number == 1) { return 1; } else { return $number * factorial($number - 1); } } echo factorial(5); // 輸出: 120
登錄后復制
2. 尋找樹中節點的祖先
class Node { public $data; public $children; } function findAncestors($node, $target) { if ($node->data == $target) { return [$node->data]; } else { $ancestors = []; foreach ($node->children as $child) { $ancestors = array_merge($ancestors, findAncestors($child, $target)); } if (!empty($ancestors)) { $ancestors[] = $node->data; } return $ancestors; } } $root = new Node(['data' => 'root']); $node1 = new Node(['data' => 'node1']); $node2 = new Node(['data' => 'node2']); $node3 = new Node(['data' => 'node3']); $root->children = [$node1, $node2]; $node2->children = [$node3]; $ancestors = findAncestors($root, 'node3'); var_dump($ancestors); // 輸出: ['root', 'node2', 'node3']
登錄后復制