遞迴函式為自呼叫函式,在函式體內直接或間接自己呼叫自己,但需要設定自呼叫的條件,若滿足條件,則呼叫函式本身,若不滿足則終止本函式的自呼叫,然後把目前流程的主控權交回給上一層函式來執行,可能這樣給大家講解,還是很難明白,直接上例子
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
function
get_str(
$id
= 0)
return
$str
;
}
以上函式get_str()通過遞迴,不斷查詢下級分類,並最終返回字串,大家可以根據專案需求修改其中的str,最終生成乙個無限分級列表:
1
2
3
include
_once(
'connect.php'
);
//連線資料庫,connect.php檔案自己寫乙個啊
echo
get_str(0);
//輸出無限級分類
效果如:
接著我們來看返回陣列格式的函式,一樣要使用遞迴:
1
2
3
4
5
6
7
8
9
10
function
get_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格式的資料,則可使用:
echo
json_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...