在 PHP 中,遞歸可以使用函數(shù)的自我調(diào)用來(lái)實(shí)現(xiàn),函數(shù)會(huì)反復(fù)調(diào)用自身,直到滿足某個(gè)條件才停止調(diào)用。以下是一些實(shí)現(xiàn)遞歸的方法:
- 直接遞歸:在函數(shù)中直接調(diào)用自身。
示例代碼:
function factorial($n) {
if ($n <= 1) {
return 1;
} else {
return $n * factorial($n - 1);
}
}
// 調(diào)用函數(shù)
echo factorial(5); // 輸出120,即5*4*3*2*1
- 間接遞歸:兩個(gè)或多個(gè)函數(shù)相互調(diào)用,形成遞歸。
示例代碼:
function a($n) {
if ($n > 0) {
echo $n . " ";
b($n - 1);
}
}
function b($n) {
if ($n > 1) {
echo $n . " ";
a($n / 2);
}
}
// 調(diào)用函數(shù)
a(20); // 輸出20 19 9 8 4 3 1
- 尾遞歸:函數(shù)遞歸調(diào)用發(fā)生在函數(shù)的最后一個(gè)操作,避免遞歸深度過(guò)大導(dǎo)致棧溢出。
示例代碼:
function factorial($n, $acc = 1) {
if ($n <= 1) {
return $acc;
} else {
return factorial($n - 1, $n * $acc);
}
}
// 調(diào)用函數(shù)
echo factorial(5); // 輸出120,即5*4*3*2*1
需要注意的是,遞歸調(diào)用可能會(huì)導(dǎo)致棧溢出的問(wèn)題,因此要盡量避免遞歸深度過(guò)大。