PHPで再帰関数を使用して数値を累積する方法

伊谢尔伦
リリース: 2023-03-12 10:00:02
オリジナル
1983 人が閲覧しました

再帰関数を実装する方法は何ですか?再帰関数を使用して数値を加算するにはどうすればよいですか?この記事では主にphp再帰関数の3つの実装方法とデジタル蓄積の実装方法を紹介します。必要な友人は参考にしてください。编 再帰関数は、関数自体が自分自身を呼び出すことができるという特徴がありますが、自分自身を呼び出す前に条件によって判断しなければ、無制限に呼び出すことになります。この記事では、3 つの再帰関数の実装方法をリストします。1 つ目はパラメータとして

references

を使用し、2 つ目はグローバル変数を使用し、3 つ目は static変数を使用します。このような問題を理解するには、グローバル変数を含むいくつかの基本的な知識が必要です。参照と静的変数については、そのスコープも理解する必要があります。ここではこれ以上ナンセンスではありません。詳細な紹介については以下を参照してください。 最初の方法: 参照をパラメーターとして使用する

参照がパラメーターであるかどうかに関係なく、まず参照とは何なのかを理解する必要があります。参照とは、単に、異なる名前を持つ 2 つの変数が同じ記憶アドレスを指していることを意味します。元々、各変数には独自の格納アドレスがあり、代入と削除は独自の方法で行われました。 さて、2 つの変数はストレージ アドレスを共有します。

$a=&$b;

.これが実際に意味するのは、元のストレージ アドレスに関係なく、

$a

$b とルームを共有しなければならないということです。したがって、保存されているアドレス値を変更すると、両方の値に影響します。 関数は、同じ名前の関数であっても、本来は独自の処理を行います。再帰関数は、参照をパラメータとして受け取り、2 つの関数間でデータ共有を形成するためのブリッジになることを考慮します。 2 つの関数は異なるアドレスで動作しているように見えますが、実際には同じメモリ アドレスで動作します。 コードは以下の通りです:

function test($a=0,&$result=array()){
$a++;
if ($a<10) {
    $result[]=$a;
    test($a,$result);
}
echo $a;
return $result;
}
ログイン後にコピー

上の例は、判定条件として

a<10

を使用し、条件が true の場合、 result の参照を関数に渡します。各再帰が発生し、結果の a が結果配列 result に追加されます。したがって、この例で生成される

$result

配列は Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => になります。 5 [ 5 ] => 6 [6] [7] => 8 [8] => 9 この例でさらに興味深いのは、echo a の値です。 12345678910だと思っている人も多いと思いますが、実はそうではなく、

1098765432

です。なぜ?これは、関数が echo a を実行する前に次の関数の再帰を実行しているためです。 $a、など。

2 番目の方法: グローバル変数を使用する

グローバル変数を使用して再帰関数を完成させます。グローバル変数とは何かを必ず理解してください。 global関数内で変数を宣言することは、同じ名前の外部変数への参照に他なりません。変数のスコープはこの関数のスコープ内にあります。これらの変数の値を変更すると、当然、同じ名前の外部変数の値も変更されます。ただし、& を使用すると、同じ名前の変数は同じ名前の参照ではなくなります。グローバル変数を使用して再帰関数を実装するために、それほど深いレベルを理解する必要はありません。グローバル変数の本来の見方を維持することで、自然に再帰関数を理解できます。 コードは次のとおりです:

function test($a=0,$result=array()){
    global $result;
    $a++;
    if ($a<10) {
        $result[]=$a;
        test($a,$result);
    }
    return $result;
}
ログイン後にコピー

3番目の方法: 静的変数を使用する

staticはクラスでよく見ますが、今日では再帰関数で使用します。静的の役割を覚えておいてください。関数が最初に呼び出されたときにのみ変数を初期化し、変数値を保持します。子栗 栗栗


コードは次のとおりです:

function test(){
static $count=0;
echo $count;
$count++;
}
test();
test();
test();
test();
test();
ログイン後にコピー

このコードの実行結果は何ですか?

00000ですか?絶対にありません。 01234
です。まず、初めて

test(), static

を呼び出して $count を初期化します。各実行後、 $count の値は保持され、再度初期化されません。これは、static を直接無視するのと同じです。 $count= 0; この文。 つまり、再帰関数に static を適用する効果は想像できます。再帰関数間の「ブリッジ」として使用する必要がある変数を初期化するには、static を使用します。各再帰では、「ブリッジ変数」 の値が保持されます。

コードは次のとおりです:

function test($a=0){
    static $result=array();
    $a++;
    if ($a<10) {
        $result[]=$a;
        test($a);
    }
    return $result;
}
ログイン後にコピー

概要

  所谓递归函数,重点是如何处理函数调用自身是如何保证所需要的结果得以在函数间合理"传递",当然也有不需要函数之间传值得递归函数,例如:

代码如下:

function test($a=0){
    $a++;
    if ($a<10) {
        echo $a;
        test($a);
    }
}
ログイン後にコピー

下面通过一段代码演示一下php使用递归函数实现数字累加的方法。

代码如下所示:

代码如下:

<?php
function summation ($count) {
   if ($count != 0) :
     return $count + summation($count-1);
   endif;
}
$sum = summation(10);
print "Summation = $sum";
?>
ログイン後にコピー

      

以上がPHPで再帰関数を使用して数値を累積する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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