PHP は配列の最小値を再帰的に検索します

WBOY
リリース: 2023-05-22 19:00:35
オリジナル
480 人が閲覧しました

PHP では、再帰は多くの複雑な問題を解決できる非常に便利なテクノロジです。配列を扱う場合、再帰は配列内の最小値を見つけるのにも役立ちます。この記事では、PHP で再帰を使用して配列の最小値を計算する方法について説明します。

再帰とは何ですか?

再帰は、関数がそれ自体を呼び出す手法です。再帰関数では、問題解決メソッドがそれ自体を呼び出して、より小さなサブ問題を解決します。問題が小さすぎてそれ以上分解できない場合、再帰関数はそれ自体の呼び出しを停止し、結果を返します。再帰は、ツリー構造の走査、グラフ検索、並べ替えおよび検索アルゴリズムなどの複雑な問題を解決するためによく使用されます。

再帰的実装

簡単な例から始めましょう: 配列の合計を計算します。このアルゴリズムは再帰を使用して実装できます。

function sum($arr){
    if(count($arr) == 0){
        return 0;
    } else {
        $first = array_shift($arr);
        return $first + sum($arr);
    }
}

// 测试
$arr = array(1, 2, 3, 4, 5);
echo sum($arr); // 输出 15
ログイン後にコピー

上記のコードでは、まず配列が空かどうかを確認します。 「はい」の場合は 0 を返します。それ以外の場合は、配列の最初の要素をポップし、それを sum() 関数で再帰的に呼び出して配列の残りの部分を渡して追加します。このプロセスは、配列全体の処理が完了するまで続きます。最後に結果を返します。

再帰的関数呼び出しスタック

注: 再帰的手法は非常に便利ですが、問題を引き起こす可能性もあります。これは、関数呼び出しごとに新しいフレームがスタックに追加され、スタック サイズが制限されているためです。再帰の深さが深すぎると、スタックが使い果たされる可能性があります。 PHP では、デフォルトでスタック サイズは 1000 関数呼び出しです。これを回避するには、再帰の代わりに反復を使用するか、PHP の最大スタック サイズを増やすことができます。

配列の最小値を計算する

次に、再帰を使用して PHP 配列の最小値を見つける方法を見てみましょう。このアルゴリズムを実装する考え方は、配列の合計を計算するのと似ています。

function findMinimum($arr){
    // 如果数组为空,则返回NULL
    if(count($arr) == 0){
        return NULL;
    } else if(count($arr) == 1){
        // 如果数组只有一个元素,则返回它
        return $arr[0];
    } else {
        // 否则,递归地调用自身,并比较子数组的最小值
        $first = $arr[0];
        $rest = array_slice($arr,1);
        $min = findMinimum($rest);
        if($min < $first){
            return $min;
        } else {
            return $first;
        }
    }
}

// 测试
$arr = array(1, 3, 2, 5, 4);
echo findMinimum($arr); // 输出 1
ログイン後にコピー

まず、配列のサイズを確認します。配列が空の場合は、NULL が返されます。要素が 1 つしかない場合は、それを返します。それ以外の場合は、配列の最初の要素を変数 $first に保存し、残りの要素を変数 $rest に保存します。次に、$rest 配列を引数として渡して、それ自体を再帰的に呼び出します。これは部分配列の最小値を返します。最後に、$min と $first を比較し、2 つの最小値を返します。

概要

この記事では、再帰を使用して PHP 配列の最小値を計算する方法について説明しました。再帰は非常に便利な手法ですが、スタック オーバーフローなどの問題を引き起こす可能性もあります。したがって、再帰を使用する場合は注意が必要です。スタック オーバーフローの可能性が高い場合は、反復アルゴリズムを使用するか、PHP の最大スタック サイズを増やすことを検討できます。

以上がPHP は配列の最小値を再帰的に検索しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート