搜尋
首頁後端開發php教程php如何使用遞歸函數實現數字累加
php如何使用遞歸函數實現數字累加Jul 01, 2017 pm 01:21 PM
php函數實現

實作遞迴函數有哪些方法呢?如何用遞歸函數實現數字累加?這篇文章就主要介紹php遞迴函數三種實作方法及如何實現數字累加,需要的朋友可以參考下。

      遞歸函數在程式設計上是較常用的一類函數,其特性是函數本身可以呼叫自身,但是必須在呼叫自身前有條件判斷,否則會導致無限呼叫下去。本文列出了三種遞歸函數實作方法,第一種利用引用做參數,第二種利用全域變量,第三種利用靜態變量,理解此類問題需要有點基礎,包括對全域變量,引用,靜態變數的理解,也需對他們的作用範圍有所理解。在這不廢話了,具體介紹請看下文。

第一種方法:利用引用做參數

  先不管引用做不做參數,必須先明白引用到底是什麼?引用不過是指兩個不同名的變數指向同一塊儲存位址。本來每個變數有各自的儲存位址,賦值刪除各行其道。

現在可好,兩個變數共用一塊儲存位址。 $a=&$b; 。實際上指的是 $a 不管不顧自己原來的儲存位址,非要和 $b 共用一室了。因而任何對儲存位址數值的改變都會影響兩個值。  

  函數之間本來也是各行其是,即便是同名函數。遞歸函數是考慮將引用作為參數,成為一個橋樑,形成兩個函數間的資料共享。雖然兩個函數見貌似操作的是不同地址,但是實際上操作的是一塊兒內存地址。

程式碼如下:

function test($a=0,&$result=array()){
$a++;
if ($a<10) {
    $result[]=$a;
    test($a,$result);
}
echo $a;
return $result;
}

  上面的例子非常簡答,以a作為判斷條件,條件成立,則把a賦給result[];將result的參考傳入函數,會將每一次遞歸產生的a加到結果陣列result。因而本例產生的$result陣列是Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4 ] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 ) 。

        本範例比較有趣的是echo a 的值。相信很多人認為是12345678910吧,其實不然,是1098765432。為什麼呢?因為函數還沒執行echo a前就進行了下一次的函數遞迴。

        真正執行echo a是當a條件不滿足的時候,echo a,回傳result,對於上一層而言,執行完遞歸函數,開始執行本層的echo $a,依序類別推。

第二種方法:利用全域變數

  利用全域變數完成遞迴函數,請確保你確實理解什麼是全域變數。 global在函數內申明變數不過是外部變數的同名引用。變數的作用範圍仍在本函數範圍內。改變這些變數的值,外部同名變數的值自然也改變了。但一旦用了&,同名變數就不再是同名引用。利用全域變數實作遞歸函數沒必要理解到這麼深的一層,還保持原有對全域變數的看法就可以順理成章理解遞歸函數。

程式碼如下:

function test($a=0,$result=array()){
    global $result;
    $a++;
    if ($a<10) {
        $result[]=$a;
        test($a,$result);
    }
    return $result;
}

第三種方法:利用靜態變數

  我們常常在類別中見到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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具