php递归函数详解以及实现数据的无限级分类

管理员

什么是递归函数
递归函数即自调用函数,也就是函数在函数体内部直接或间接地自己调用自己。需要注意的是使用递归函数时通常会在函数体中附加一个判断条件,以判断是否需要继续执行递归调用,当条件满足时会终止函数的递归调用。

例1

function test($int)
{
    if ($int <= 1) {
        return 1;
    }

    return $int * test($int - 1);
}

echo test(5); //结果120

例2:计算斐波那契数列
斐波那契数列数列如下所示:
1、1、2、3、5、8、13、21、34、55…
斐波那契数列列由大于1开始,之后的斐波那契数列系数就由之前的两数相加
顺着递归思路去想, f(1) = 1; f(2) = 1 ; f(3) = f(2)+f(1) 【2】 f(4) = f(3)+f(2) 【3】

function test($num)
{
    if ($num == 1 || $num == 2) {
        return 1;
    } else {
        return test($num - 1) + test($num - 2);
    }
}

test(10);

输出的结果是55.

例3:
需要处理的数组

$arr = [
    1=>['id'=>1,'name'=>'父1','pid'=>0],
    2=>['id'=>2,'name'=>'父2','pid'=>0],
    3=>['id'=>3,'name'=>'父1-1','pid'=>1],
    4=>['id'=>4,'name'=>'父1-2','pid'=>1],
    5=>['id'=>5,'name'=>'父2-1','pid'=>2],
    6=>['id'=>6,'name'=>'父1-1-1','pid'=>4],
];

执行方法:

function getTree($arr, $id) {
    $tree=[];
    foreach ($arr as $val) {
        if($val['pid'] == $id) {
           $val['son'] = getTree($arr, $val['id']);
           $tree[]= $val;
        }
    }
    return $tree;
}

$tree = getTree($arr, 0);
var_dump($tree);

输出的结果:

^ array:2 [▼
  0 => array:4 [▼
    "id" => 1
    "name" => "父1"
    "pid" => 0
    "son" => array:2 [▼
      0 => array:4 [▼
        "id" => 3
        "name" => "父1-1"
        "pid" => 1
        "son" => []
      ]
      1 => array:4 [▼
        "id" => 4
        "name" => "父1-2"
        "pid" => 1
        "son" => array:1 [▼
          0 => array:4 [▼
            "id" => 6
            "name" => "父1-1-1"
            "pid" => 4
            "son" => []
          ]
        ]
      ]
    ]
  ]
  1 => array:4 [▼
    "id" => 2
    "name" => "父2"
    "pid" => 0
    "son" => array:1 [▼
      0 => array:4 [▼
        "id" => 5
        "name" => "父2-1"
        "pid" => 2
        "son" => []
      ]
    ]
  ]
]
0人点赞
PHP
管理员

全部评论 0

推荐阅读 更多精彩内容