PHP使用递归生成子数组(代码实例)

给定一个数组,使用递归生成给定数组的所有可能的子数组。本篇文章就将给大家介绍如何用PHP来实现此功能。

例子:

输入:[1,2,3]

输出:[1],[1,2],[2],[1,2,3],[2,3],[3]

输入:[1,2]

输出:[1],[1,2],[2]

方法:

我们使用两个指针start和end来维护数组的起点和终点,并按照下面给出的步骤操作:

1.如果我们已经到达数组的末尾,就停止

2.如果start大于end,则增加结束索引

3.从索引start到end打印子数组并增加起始索引

以下是上述方法的PHP代码实现示例:

  1. <?php
  2. // 使用递归函数为给定数组打印所有可能的子数组
  3. function printSubArrays($arr, $start, $end)
  4. {
  5. // 如果我们已经到达数组的末尾,就停止
  6. if ($end == count($arr))
  7. return;
  8. // 增加端点并从0开始
  9. else if ($start > $end)
  10. return printSubArrays($arr, 0,
  11. $end + 1);
  12. // 打印子数组并增加起始点
  13. else
  14. {
  15. echo "[";
  16. for($i = $start; $i < $end + 1; $i++)
  17. {
  18. echo $arr[$i];
  19. if($i != $end)
  20. echo ", ";
  21. }
  22. echo "]\n";
  23. return printSubArrays($arr, $start + 1,
  24. $end);
  25. }
  26. }
  27. $arr = array(1, 2, 3);
  28. printSubArrays($arr, 0, 0);

输出:

  1. [1]
  2. [1,2]
  3. [2]
  4. [1,2,3]
  5. [2,3]
  6. [3]