无限递归

思路

递归出所有个数是 $gain 的集合
还需要数字个数 与 剩余可用数字个数 作比对防止重复循环

<?php

$gain = 3;  // 我要从数据中取几个
$data = ['a', 'b', 'c', 'd'];   //原始数据

// 删选条件不满足直接暂停
if (count($data) <= 0 OR $gain <= 0 OR $gain > count($data)){
    return;
}

handle($data, $gain, []);

function handle($data, $gain, $list, $start = 1)
{
    $n = count($data);
    if (count($list) == $gain) {
        // 满足条件取出数据
        foreach ($list as $item){
            $todo[] = $data[$item-1];
        }
        fprintf(STDOUT, implode(',', $todo) . "\n");
        return;
    }

    // 剩余可用数字个数 $n - $i + 1
    // 还需要数字个数 $gain - count($list)
    // $list 记录前面取出的数据 后面再继续排序
    for ($i = $start; $n - $i + 1 >= $gain - count($list); $i++) {
        $list[] = $i;
        handle($data, $gain, $list, $i + 1);
        // 弹出在最后一个$i 继续其他的
        array_pop($list);
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇