ホームページ バックエンド開発 PHPチュートリアル 3つのPHP再帰関数の実装方法と数値の累積

3つのPHP再帰関数の実装方法と数値の累積

Jun 11, 2018 am 10:48 AM
再帰関数

再帰関数を実装するにはどのような方法がありますか?再帰関数を使用して数値を加算するにはどうすればよいですか?この記事では主に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();
  
ログイン後にコピー
このコードの実行結果は何ですか?

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递归函数三种实现方法及如何实现数字累加的全部内容,希望对大家今后的学习有所帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

thinkPHP实现联动菜单的功能

php合并数组并保留键值的实现方法

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C++ 再帰関数の最適化手法にはどのようなものがありますか? C++ 再帰関数の最適化手法にはどのようなものがありますか? Apr 17, 2024 pm 12:24 PM

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

Python コードでの過剰な関数のネスト エラーを解決するにはどうすればよいですか? Python コードでの過剰な関数のネスト エラーを解決するにはどうすればよいですか? Jun 25, 2023 pm 12:35 PM

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

検索アルゴリズムに C++ 再帰関数を適用しますか? 検索アルゴリズムに C++ 再帰関数を適用しますか? Apr 17, 2024 pm 04:30 PM

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

C++ の再帰関数の終了条件は何ですか? C++ の再帰関数の終了条件は何ですか? Apr 17, 2024 am 11:33 AM

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

ソートアルゴリズムにおけるC++の再帰関数の応用? ソートアルゴリズムにおけるC++の再帰関数の応用? Apr 17, 2024 am 11:06 AM

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

C++ 再帰関数の末尾再帰最適化戦略を実装するにはどうすればよいですか? C++ 再帰関数の末尾再帰最適化戦略を実装するにはどうすればよいですか? Apr 17, 2024 pm 02:42 PM

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

Go言語で再帰関数を使用して階乗を実装するにはどうすればよいですか? Go言語で再帰関数を使用して階乗を実装するにはどうすればよいですか? Jul 31, 2023 pm 08:31 PM

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

ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する C プログラム ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する C プログラム Aug 25, 2023 pm 10:09 PM

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

See all articles