3つのPHP再帰関数の実装方法と数値の累積
再帰関数を実装するにはどのような方法がありますか?再帰関数を使用して数値を加算するにはどうすればよいですか?この記事では主にPHPの再帰関数の3つの実装方法とデジタル蓄積の実装方法を紹介します。
再帰関数は、プログラミングでよく使われる関数です。その特徴は、関数自体が自分自身を呼び出すことができますが、自分自身を呼び出す前に条件付きで判断する必要があり、そうしないと無限呼び出しが発生します。この記事では、3 つの再帰関数の実装方法を示します。1 つ目はパラメーターとして参照を使用し、3 つ目は静的変数を使用します。このような問題を理解するには、グローバル変数、参照、静的変数の理解などの基本的な知識が必要です。また、自分たちの行動範囲を理解する必要もあります。ここではこれ以上ナンセンスではありません。詳細な紹介については以下を参照してください。
最初の方法: 参照をパラメータとして使用する
参照がパラメータであるかどうかに関係なく、まず参照とは何かを理解する必要があります。参照とは、単に、異なる名前を持つ 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; }
上記の例は非常に単純です。条件が true の場合、 を判定条件として使用します。 result[]; result の参照が関数に渡され、各再帰によって生成された a が結果配列 result に追加されます。したがって、この例で生成される $result 配列は Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4 ] => 5 [5] => 6 [6] => 8 [8] => 9 この例でさらに興味深いのは、echo a の値です。
12345678910だと思っている人も多いと思いますが、実はそうではなく、1098765432です。なぜ?これは、関数が echo a を実行する前に次の関数の再帰を実行しているためです。 再帰関数の実行後、この層の echo $a, が実行され始めます。
2 番目の方法: グローバル変数を使用するグローバル変数を使用して再帰関数を完了します。 グローバル変数とは何かを理解してください。 global関数内での変数の宣言は、同じ名前の外部変数への参照に他なりません。変数のスコープはこの関数のスコープ内にあります。これらの変数の値を変更すると、当然、同じ名前の外部変数の値も変更されます。ただし、& を使用すると、同じ名前の変数は同じ名前の参照ではなくなります。グローバル変数を使用して再帰関数を実装するために、それほど深いレベルを理解する必要はありません。グローバル変数の本来の見方を維持することで、自然に再帰関数を理解できます。 コードは次のとおりです:
function test($a=0,$result=array()){ global $result; $a++; if ($a<10) { $result[]=$a; test($a,$result); } return $result; }
3 番目の方法: 静的変数を使用する
クラスで static をよく目にします。 ,今日では再帰関数で使用します。 static の役割を覚えておいてください。関数が最初に呼び出されたときにのみ変数を初期化し、変数値を保持します。
: コードは次のとおりです: function test(){
static $count=0;
echo $count;
$count++;
}
test();
test();
test();
test();
test();
ですか?絶対にありません。 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 function summation ($count) { if ($count != 0) : return $count + summation($count-1); endif; } $sum = summation(10); print "Summation = $sum"; ?>
面对php递归函数,不必要伤脑筋,深入的理解变量引用相关知识对解决此类问题很有帮助,以上内容就是php递归函数三种实现方法及如何实现数字累加的全部内容,希望对大家今后的学习有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上が3つのPHP再帰関数の実装方法と数値の累積の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









再帰関数のパフォーマンスを最適化するには、次の手法を使用できます。 末尾再帰を使用する: 再帰呼び出しを関数の最後に配置して、再帰オーバーヘッドを回避します。メモ化: 計算の繰り返しを避けるために、計算結果を保存します。分割統治法: 問題を分解し、サブ問題を再帰的に解決して効率を向上させます。

Python は非常に強力なプログラミング言語であり、多くのプログラマーが主要なプログラミング言語として Python を選択しています。ただし、コード内で関数のネストが多すぎると、プログラムの保守と理解が困難になる可能性があります。この記事では、Python コードでの過剰な関数のネスト エラーを解決する方法を説明します。関数のネストの簡単な説明 関数のネストとは、関数の本体内で別の関数を定義するプロセスを指します。関数をネストすると、プログラムの構造がより明確になり、コードが読みやすく、保守しやすくなります。ただし、ネストされた関数が多すぎると、コード構造が過度に複雑になる可能性があります。

再帰関数は、ツリー状のデータ構造を探索するための検索アルゴリズムで使用されます。深さ優先検索ではスタックを使用してノードを探索しますが、幅優先検索ではキューを使用してレイヤーごとに検索します。ファイルの検索などの実際のアプリケーションでは、再帰関数を使用して、指定されたディレクトリ内の特定のファイルを検索できます。

C++ 再帰関数の終了条件は次のとおりです。 ベースライン条件: 関数が結果を直接返すことができる状態に達したかどうかを確認し、通常は特定の条件またはパラメーター値がしきい値を満たすかどうかを判断します。再帰終了条件: ベースライン条件の代替または追加で、再帰の深さを追跡するか最大再帰の深さ制限を設定することによって、一定回数の再帰呼び出し後に関数が停止するようにします。

C++ のソート アルゴリズムにおける再帰関数の適用 再帰関数によって実装された挿入ソートおよびマージ ソート アルゴリズムは、複雑な問題をより小さなサブ問題に分解し、再帰呼び出しを通じてそれらを効率的に解決できます。挿入ソート: 要素を 1 つずつ挿入して配列をソートします。マージソート: 分割統治し、配列を分割してサブ配列を再帰的にソートし、最後にソートされたサブ配列をマージします。

末尾再帰最適化戦略は、末尾再帰呼び出しをループに変換することで関数呼び出しスタックの深さを効果的に削減し、スタック オーバーフローを防ぎます。最適化戦略には以下が含まれます。 末尾再帰の検出: 関数内に末尾再帰呼び出しがあるかどうかを確認します。関数をループに変換する: 末尾再帰呼び出しの代わりにループを使用し、スタックを維持して中間状態を保存します。

Go言語で再帰関数を使用して階乗を実装するにはどうすればよいですか?階乗は、負でない整数 n に、それより小さい 1 までのすべての正の整数を乗算する数学の一般的な計算です。たとえば、5 の階乗は 5! と表現でき、54321=120 と計算されます。コンピューター プログラミングでは、階乗計算を実装するために再帰関数をよく使用します。まず、再帰関数の概念を理解する必要があります。再帰関数とは、関数の定義内で関数自体を呼び出すプロセスを指します。問題を解決するとき、再帰関数は継続的に実行されます。

ここにディレクトリがあります。私たちのタスクは、ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する C プログラムを作成することです。ディレクトリは、一連のファイルが保存される場所/領域/場所です。サブディレクトリはルート ディレクトリ内のディレクトリであり、ルート ディレクトリには別のサブディレクトリを持つことができます。 C プログラミング言語では、ディレクトリ内のすべてのファイルとサブディレクトリを簡単に一覧表示できます。次のプログラムは、ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する方法を示しています。 // ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する C プログラムの例 ライブ デモンストレーション #include<stdio.h>#include<dirent.h>intmain(void){ &am
