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>