php遞迴演算法經典例項

2021-08-07 23:14:58 字數 3145 閱讀 8318

遞迴函式為自呼叫函式,在函式體內直接或間接自己呼叫自己,但需要設定自呼叫的條件,若滿足條件,則呼叫函式本身,若不滿足則終止本函式的自呼叫,然後把目前流程的主控權交回給上一層函式來執行,可能這樣給大家講解,還是很難明白,直接上例子

function test ($n)else 

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)
中序遍歷二叉樹

void inorder (bintree t)    

}

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;

插入資料後,如圖:

根據不同的需求,我們提供兩種不同格式的自定義函式,一種是返回字串,一種是返回陣列,兩種函式都使用了遞迴方法。先看返回字串格式的函式: 1

2

3

4

5

6

7

8

9

10

11

12

functionget_str($id= 0)

return$str;

}

以上函式get_str()通過遞迴,不斷查詢下級分類,並最終返回字串,大家可以根據專案需求修改其中的str,最終生成乙個無限分級列表:

1

2

3

include_once('connect.php');//連線資料庫,connect.php檔案自己寫乙個啊

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

效果如:

接著我們來看返回陣列格式的函式,一樣要使用遞迴:

1

2

3

4

5

6

7

8

9

10

functionget_array($id=0)

return$arr;

}

}

函式get_array()返回了陣列,這是我們期待的,所以筆者推薦使用get_array()得到陣列,這樣一來,我們可以對陣列進行任意操作,比如我們可以將陣列轉換成json格式的資料傳給前端頁面,前端頁面可以通過解析json資料靈活展示分類資訊。比如樹形結構的分類列表,下拉分類列表等。

1

2

3

include_once('connect.php');//連線資料庫

$list= get_array(0);//呼叫函式

print_r($list);//輸出陣列

如果要輸出json格式的資料,則可使用:

echojson_encode($list);

遞迴演算法經典例項 演算法 遞迴演算法

遞迴現象 老和尚講故事 自己呼叫自己 兩面鏡子互相映像 兩者相互呼叫 演算法思想 把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式自己呼叫自己的情況。遞迴函式 內部操作直接或間接地呼叫了自己的函式。遞迴函式兩大要素...

C 實現遞迴演算法經典例項

目錄 在數學與電腦科學中,遞迴是指在函式的定義中使用函式自身的方法。遞迴演算法是一種直接或者間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。遞迴演算法解決問題的特點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時...

遞迴和分治演算法 經典題目

made by syx 2010年7月13日 21 05 27 迴圈賽日程表 快速排序 合併排序 棋盤覆蓋 有bug 求大數乘積 10進製,但有丟位 二分搜尋技術 整數劃分 階乘 迴圈賽日程表 include include using namespace std const int n 100 i...