Java實現遞歸 斐波那契數列 階乘
階乘
/**
* 使用遞歸算法求階乘
* 求階乘
* 5!=5*4*3*2*1;
*
* 1=1;
* 2!=2*1!;
* 3! = 3*2!;
* 4! = 4*3!;
* n! =n*(n-1)!
* 1.首先歸納找到算法的規律
* 2.遞歸本質就是方法自己調用自己
* 3.必須有一個遞歸終止的條件(不讓調用自己)
* 4.遞歸再自己掉自己的時候,傳遞的參數在不斷髮生變化
* @param num
* @return
*/
//遞歸
function digui(num){
//臨界條件
if(num == 1|| num ==0){
return 1;
}
//每次都讓num * 遞歸(num-1),直到num-1=1的時候,到達臨界條件,然後結束
return num*digui(num-1);
}
alert(digui(6));
如圖:4!
斐波那契數列
/**
* 斐波那契數列 1 1 2 3 5 8 13 21 34 55
* index 是從1開始,第幾個數
* 當index <=2 num = 1
* 當index >2 (index-1) + (index-2)
*
* @param index
* @return 根據第幾個數,返回這個數的值
*/
//使用遞歸算法生成斐波那契數列
function feibo(num){
if(num == 1|| num==2){
return 1;
}
//num的前邊兩個數的斐波那契數列相加
return feibo(num-2)+feibo(num-1);
}
alert(feibo(10));
遞歸在項目中運用 省市縣
<script>
//省市縣
var menuArr =[
{ id:1, pId:0, name:"中國"},
{ id:11, pId:1, name:"北京"},
{ id:111, pId:11, name:"朝陽"},
{ id:112, pId:11, name:"海淀"},
{ id:113, pId:11, name:"豐臺"},
{ id:114, pId:111, name:"朝陽111"},
{ id:12, pId:1, name:"山西"},
{ id:121, pId:12, name:"太原"},
{ id:122, pId:12, name:"臨汾"},
{ id:123, pId:122, name:"堯都區"},
{ id:124, pId:123, name:"蒲縣"},
{ id:13, pId:1, name:"河南"},
{ id:2, pId:0, name:"美國"}
];
var menuHtml = "";
//構建樹形菜單
function buildMenu(pid){
//調用判斷是否有字節點的方法
var childArr = getChild(menuArr,pid);
//如果數組長度大於0,說明有孩子,然後進行拼接ul和li
if(childArr.length>0){
menuHtml += "<ul>";
//進行循環數組,拼接li
for (var i=0;i<childArr.length ;i++ )
{
menuHtml += "<li>";
//拼接name
menuHtml += childArr[i].name;
//進行遞歸,判斷該id下是否還有子節點,如果有,繼續在該節點拼接ul li
buildMenu(childArr[i].id)
menuHtml += "</li>";
}
menuHtml += "</ul>";
}
return menuHtml;
}
//獲取子節點,如果該pId有孩子,就存放到數組中
function getChild(arr,pid){
//用來存放pid子節點的集合
var childArr = [];
for (var i=0;i<arr.length;i++)
{
//如果參數中的pId和數組中的父Id相等,說明該參數傳過來的pid下有子節點,並放到數組中
if(pid == arr[i].pId){
childArr.push(arr[i]);
}
}
//將有子節點的數組返回
return childArr;
}
//調用方法
buildMenu(0);
//初始化方法,把 menuHtml給了頁面dix進行展示
function init(){
document.getElementById("div1").innerHTML=menuHtml;
}
//-->
</script>
<body onload='init()'>
<div id="div1"></div>
</body>
</html>