ホームページ バックエンド開発 PHPチュートリアル PHPで再帰関数を使用して数値を累積する方法

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

Jul 01, 2017 pm 01:21 PM
php 関数 成し遂げる

再帰関数を実装する方法は何ですか?再帰関数を使用して数値を加算するにはどうすればよいですか?この記事では主に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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles