日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

递归算法php,php递归算法经典实例

發布時間:2023/12/10 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归算法php,php递归算法经典实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP遞歸算法就是函數調用函數了操作非常的簡單了,我們下面來給各位介紹PHP遞歸算法及實際的一些關于遞歸的用法。

遞歸函數為自調用函數,在函數體內直接或間接自己調用自己,但需要設置自調用的條件,若滿足條件,則調用函數本身,若不滿足則終止本函數的自調用,然后把目前流程的主控權交回給上一層函數來執行,可能這樣給大家講解,還是很難明白,直接上例子function test ($n){

echo $n.” “;

if($n>0){

test($n-1);

}else{

echo “>”;

}

echo $n.” ”

}

test(2)

這個例子最終的輸出結果是2 1 0>0 1 2

我解釋下 為何輸出是這樣的

第一步,執行test(2),echo 2,然后因為2>0,執行test(1), 后面還有沒來得及執行的echo 2

第二步,執行test(1),echo 1,然后因為1>0,執行test(0),同樣后面還有沒來得及執行的 echo 1

第三步,執行test(0),echo 0,執行test(0),echo 0, 此時0>0的條件不滿足,不在執行test()函數,而是echo “>”,并且執行后面的 echo 0

此時函數已經不再調用自己,開始將流程的主控權交回給上一層函數來執行,也就是開始執行剛剛所有test()函數沒來得及輸出的最后一個echo,0的一層是1也就是輸出1 1的上一層是2 也就是輸出2 2沒有山一層 所以呢 輸出的內容就是2 1 0>0 1 2

如何考慮用PHP遞歸算法來解決問題

例:求s=1+2+3+4+5+6+……+n本來這個問題我們過去常用循環累加的方法。而這里如要用遞歸的方法,必須考慮兩點:

1) 能否把問題轉化成遞歸形式的描述;

2) 是否有遞歸結束的邊界條件。

顯然遞歸的兩個條件都有了:

1) s(n) =s(n-1)+n

2) s(1)=1

所以源程序為:int progression(int n){

int res;

if (n=1 )res=1 else res=progression(n-1)+n;

return res;

}

中序遍歷二叉樹void inorder (BinTree T){

if (T){

inorder(T->lchild);

printf(“%c”,T->data);

inorder(T->rchild);

}

}

Mysql

首先我們準備一張數據表class,記錄商品分類信息。表中有三個字段,id:分類編號,主鍵自增長;title:分類名稱;pid:所屬上級分類id。

class表結構:CREATE TABLE IF NOT EXISTS `class` (

`id` mediumint(6) NOT NULL AUTO_INCREMENT,

`title` varchar(30) NOT NULL,

`pid` mediumint(6) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入數據后,如圖:

根據不同的需求,我們提供兩種不同格式的自定義函數,一種是返回字符串,一種是返回數組,兩種函數都使用了遞歸方法。先看返回字符串格式的函數:function get_str($id = 0) {

global $str;

$sql = "select id,title from class where pid= $id";

$result = mysql_query($sql);//查詢pid的子類的分類

if($result && mysql_affected_rows()){//如果有子類

$str .= '';

while ($row = mysql_fetch_array($result)) { //循環記錄集

$str .= "

" . $row['id'] . "--" . $row['title'] . ""; //構建字符串

get_str($row['id']); //調用get_str(),將記錄集中的id參數傳入函數中,繼續查詢下級

}

$str .= '';

}

return $str;

}

以上函數get_str()通過遞歸,不斷查詢下級分類,并最終返回字符串,大家可以根據項目需求修改其中的str,最終生成一個無限分級列表:include_once('connect.php'); //連接數據庫,connect.php文件自己寫一個啊

echo get_str(0); //輸出無限級分類

效果如:

接著我們來看返回數組格式的函數,一樣要使用遞歸:function get_array($id=0){

$sql = "select id,title from class where pid= $id";

$result = mysql_query($sql);//查詢子類

$arr = array();

if($result && mysql_affected_rows()){//如果有子類

while($rows=mysql_fetch_assoc($result)){ //循環記錄集

$rows['list'] = get_array($rows['id']); //調用函數,傳入參數,繼續查詢下級

$arr[] = $rows; //組合數組

}

return $arr;

}

}

函數get_array()返回了數組,這是我們期待的,所以筆者推薦使用get_array()得到數組,這樣一來,我們可以對數組進行任意操作,比如我們可以將數組轉換成json格式的數據傳給前端頁面,前端頁面可以通過解析json數據靈活展示分類信息。比如樹形結構的分類列表,下拉分類列表等。include_once('connect.php'); //連接數據庫

$list = get_array(0); //調用函數

print_r($list); //輸出數組

如果要輸出json格式的數據,則可使用:

echo json_encode($list);

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的递归算法php,php递归算法经典实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。