Ⅰ php 遞歸的解釋
這個 是這樣的。 首先傳值10 進入函數 第一次函數還沒執行最後一行的echo $num." "; 就嵌套進了第二次函數 .....直到進入最後一層函數 執行完了 就會跳出執行上一層的 函數沒執行完的echo $num." "; 一直這樣 最後就 到了第一次函數的 echo $num." ";
Ⅱ PHP用函數遞歸計算1的平方+2的平方+……+20的平方和
遞歸:
function square_sum($n, &$sum = 0){ if ($n >= 1) { $sum += $n*$n; $n--; square_sum($n, $sum); } return $sum;}echo square_sum(5);//55
非遞歸:
function square_sum($n){ $sum = 0; for ($i=1; $i <= $n; $i++) $sum += $i*$i; return $sum;}echo square_sum(5);//55
Ⅲ 如何理解php中的遞歸函數 (詳細講解)
遞歸其實就是「一個函數的自調用」
在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程
拿樓主的程序來說
demo($n)內部又有調用demo($n-1),構成了「自調用」
且,$n又有一個「期望值」,即是$n>1,不滿足此條件時,該自調用終止
即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推
這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)
Ⅳ PHP遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁比如設置為每頁顯示10個 。
每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數<10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。
Ⅳ PHP怎麼遞歸
下面我舉一個其他的例子,雖然不是族譜,但是原理都是一樣的。
在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那麼PHP是如何實現無限級分類的呢?我們在本文中使用遞歸演算法並結合mysql數據表實現無限級分類。
遞歸,簡單的說就是一段程序代碼的重復調用,當把代碼寫到一個自定義函數中,將參數等變數保存,函數中重復調用函數,直到達到某個條件才跳出,返回相應的數據。
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;
插入數據後,如圖:
如果要輸出json格式的數據,則可使用:
echo json_encode($list);
Ⅵ 簡單的php遞歸調用問題
1. 輸出3,為什麼是3呢 我想要1啊 的原因:
因為你定義的 static $i ,如果你在函數體里 echo $i 就會發現,當你第2次調用時,初始值$i不是0,而是2。
2. 試修改代碼如下:
<?php
$str = "procts-2-1.html";
$str2 = "procts-3.html";
$i = 0; //函數體外定義全局變數
function str_count($str, $chr)
{
global $i;
echo 'cur i: '. $i . '<br/>';
if ($p = strpos($str, $chr))
{
$i++;
str_count(substr($str, $p + 1), $chr);
}
return $i;
}
echo str_count($str, '-') . '<br>';
$i = 0;//重新初始化全局變數
echo str_count($str2, '-');
?>
3. 以上代碼僅是為編碼練習,通常不建議 統計字元串中指定符號的個數 用這種辦法。
Ⅶ php與mysql表中如何求遞歸求和匯總
functionsumShuzi(&$tree,&$updateData=array()){
$sum=0;
//foreach($treeas$key=>$item){//這句話有毒
foreach($treeas$key=>&$item){
if(isset($item['children'])){
$oldPshuzi=$tree[$key]['Pshuzi'];
$tree[$key]['Pshuzi']=sumShuzi($item['children'],$updateData);
if($oldPshuzi!=$tree[$key]['Pshuzi']){
$updateData[$item['id']]=array($tree[$key]['Pshuzi'],$tree[$key]['Pname_ch']);
}
}
$sum+=$tree[$key]['Pshuzi'];
}
return$sum;
}
$tree=json_decode('[{"id":"1","Pid":"0","Pname_ch":"u6e20u9053u90e8","Pshuzi":"1638000","children":[{"id":"4","Pid":"1","Pname_ch":"u9500u552eu4e8cu90e8","Pshuzi":"895000","children":[{"id":"13","Pid":"4","Pname_ch":"u5468u7ecfu7406","Pshuzi":"28","children":[{"id":"28","Pid":"13","Pname_ch":"u6e56u5357","Pshuzi":"158000"},{"id":"35","Pid":"13","Pname_ch":"u65b0u7586","Pshuzi":"19000"}]},{"id":"40","Pid":"4","Pname_ch":"u9648u7ecfu7406","Pshuzi":"5000"}]}]}]',true);
//$tree是具有父子關系的數據樹
sumShuzi($tree,$updateData);
foreach($updateDataas$id=>$item){
$sql="updateyour_tablesetPshuzi={$item[0]}whereid={$id}";
mysqli_query($db,$sql);//$db是你的資料庫連接結果
}
Ⅷ 可以列舉幾個簡單的php遞歸例子嗎
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//遞歸獲得角色ID字元串
function explodeRole($roleObj, &$resultStr){
if(0 < count($roleObj->childRoleObjArr)){
foreach($roleObj->childRoleObjArr as $childRoleObj){
if('' == $resultStr){
$resultStr .= "{$childRoleObj->id}";
}else{
$resultStr .= ", {$childRoleObj->id}";
}
explodeRole($childRoleObj, $resultStr);
}
}
}
//遞歸獲取級聯角色信息數組
function makeRoleRelation(&$roleObjArr){
foreach($roleObjArr as $item){
$item->childRoleObjArr = getRoleObjArrByParentId($item->id);
if(0 < count($item->childRoleObjArr)){
makeRoleRelation($item->childRoleObjArr);
}
}
}
//通過父角色的id獲取子角色信息
function getRoleObjArrByParentId($parentid){
$operCOGPSTRTSysRole = new COGPSTRTSysRole();
$operCOGPSTRTSysRole->setColumn($operCOGPSTRTSysRole->getAllColumn());
$operCOGPSTRTSysRole->setWhere("parentroleid={$parentid}");
$roleObjArr = $operCOGPSTRTSysRole->convResult2ObjArr($operCOGPSTRTSysRole->selectTable());
return isset($roleObjArr)?$roleObjArr:array();
}
php的遞歸函數用法
一個函數在它的函數體內調用它自身稱為遞歸調用。這種函數稱為遞歸函數。這對於程序員來說,通常有很高的實用價值,常用來將復雜的問題分解為簡單的並相同的情況,反復做這種處理直到問題解決。
用遞歸函數與不用遞歸函數的區別
示例一:使用靜態變數
?
1
2
3
4
5
6
7
8
function test(){
static $dig=0;
if($dig++<10){
echo $dig;
test();
}
}
test();//12345678910
示例二:使用遞歸函數和循環實現字元串逆轉排列
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function unreverse($str){
for($i=1;$i<=strlen($str);$i++){
echo substr($str,-$i,1);
}
}
unreverse("abcdefg");//gfedcbc
function reverse($str){
if(strlen($str)>0){
reverse(substr($str,1));
echo substr($str,0,1);
return;
}
}
reverse("abcdefg");//gfedcbc
遞歸函數很多時候我們可以循環替代,建議當我們不能用循環替代時再用,因為用循環我們更容易理解,更不容易出錯。
php遞歸函數
php支付遞歸函數,遞歸函數就是調用自己本身,這些函數特別適用於瀏覽動態數據結構,例如樹和列表。
幾乎沒有web應用程序要求使用復雜的數據結構
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function reversr_r($str)
{
if (strlen($str)>0)
reverse_r(substr($str,1));
echo substr($str,0,1);
return;
}
?>
<?php
function reverse_i($str)
{
for($i=1;$i<=strlen($str);$i++)
{
echo substr($str,-$i,1);
}
}
這個程序清單中實現兩個函數,這兩個函數都可以相反的順序列印字元串的內容
函數reversr_r是通過遞歸實現的,而函數reverse_i()是通過循環實現的
Ⅸ PHP 如何遞歸演算法
一般來說,類似這種遍歷輸出所有文件,大多採用遞歸演算法,這樣程序顯得比較簡潔,其實際執行效率來說,並不見得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打開路徑成功
{
while (false !== ($file = readdir($handle)))//循環讀取目錄中的文件名並賦值給$file
{
if ($file != "." && $file != "..")//排除當前路徑和前一路徑
{
if (is_dir($path."/".$file))
{
// echo $path.": ".$file."<br>";//去掉此行顯示的是所有的非目錄文件
file_list($path."/".$file);
}
else
{
echo $path.": ".$file."<br>";
}
}
}
}
}
Ⅹ php中用遞歸函數計算出16的4次方
這個實際上是算組合數;
其中包含的有遞推公式:comm(n,k)=comm(n-1,k)+comm(n-1,k-1);
comm(n,0)=1,comm(n,n)=1為遞歸初始條件。
遞推公式和初始條件就是組合數的性質,相當於在算組合數,你把他逐步分解往回推就行了。
其實就我的理解,遞歸就是一種堆棧的形式,而且是一種循環。
如果還有不理解的可以問我。