$v) { if ($s != '' ) { $_s = $s .','.$v; } else { $_s = $v; } //もらった1文字を除いた文字の配列を作って $_a = $a; unset($_a[$k]); //再帰呼び出し $_r = permutations($_a, $_s); if (!empty($_r)) { // 計算チェック $list = []; foreach(explode(",", $_r[0]) as $v) { if (empty($list)) { $list = [$v, - $v]; } else { foreach($list as $l) { $tmp = [$l + $v, $l - $v]; } if (in_array($k, $tmp)) { echo 'Yes'; exit; } } } } //返り値にする変数に結果を追加 // $r = array_merge($r, $_r); } } else { //第1引数が空っぽの配列だったら、再帰呼び出しはここでストップ //返り値はこれだけ $r[] = $s; } return $r; } permutations($list); echo "No";