『壹』 php,使用遞歸的方式求0-n之間所有整數和
可以這樣操作:
<?php
functionadd($max,$sum=0)
{
if($max!=0){
$sum+=$max;
returnadd($max-1,$sum);
}
return$sum;
}
echoadd(100);
//輸出5050,就是0到100之間所有整數的和。
『貳』 php遞歸和迭代的區別
遞歸和迭代都是循環的一種。 簡單地說,遞歸是重復調用函數自身實現循環。迭代是函數內某段代碼實現循環,而迭代與普通循環的區別是:循環代碼中參與運算的變數同時是保存結果的變數,當前保存的結果作為下一次循環計算的初始值。 遞歸循環中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束循環。當然很多情況都是多種循環混合採用,這要根據具體需求。 遞歸的例子,比如給定一個整數數組,採用折半查詢返回指定值在數組中的索引,假設數組已排序,為方便描述,假設元素都為正數,數組長度為二的整數倍。 折半查詢是查詢的一種,比遍歷所有元素要快很多。 int Find(int *ary,int index,int len,int value) { if(len==一)//最後一個元素 { if (ary[index]==value)return index;//成功查詢返回索引 return -一;//失敗,返回-一 } //如果長度大於一,進行折半遞歸查詢 int half=len/二; //檢查被查值是否大於上半部分最後一個值,如果是則遞歸查詢後半部分 if(value>ary[index+half-一]) return Find(ary,index+half,half,value); //否則遞歸查詢上半部分 return Find(ary,index,half,value); } 迭代經典例子就是實數的累加,比如計算一-一00所有實數的和。 int v=一; for(i=二;i<=一00;i++) { v=v+i;
『叄』 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 遞歸函數
$hg-1 沒有改變$hg的值。而$hg--或者--$hg都改變了$hg的值。
首先分析 $hg--; 這是先用$hg再減1。也就是說每次都用的是 gogo(3).形成了死循環。
然後分析 --$hg; 這是先減1再用。
第1次:gogo(3) = 2*(gogo(2)); //
第2次:gogo(2) = 1*(gogo(1));
第3次:gogo(1) = 0*(gogo(0)) = 0*1 = 0;