递归和冒泡
递归
简单来说就是自己调自己
function aaa(){ aaa(); }
这是本质上的理解;例题:
公园里有一只猴子和一堆桃子,猴子每天吃掉桃子总数的一半,把剩下一半中扔掉一个坏的。到第七天的时候,猴子睁开眼发现只剩下一个桃子。问公园里刚开始有多少个桃子?
这里我们先用for循环来做
//最后一天剩下一个桃子 var taozi=1; //反推 for(var i=1;i<=6;i++){ taozi= (taozi+ 1) * 2; } document.write("公园里刚开始有"+taozi+"个桃子");
然后我们用递归来做:
//定义一个方法: 目的求 第n天有几个桃子 // 第n天的桃子数量 = ( 第n+1天数量+1)*2; var tao = 1; function aaa(n){ if(n==7){ tao =1; }else{ tao = (aaa(n+1)+1)*2 } return tao; } alert(aaa(1));
冒泡:
有这么一个数组[70,34,60,100,49,20,59,98] 让它从小到大排列
var shu = [70,34,60,100,49,20,59,98]; for(var o=0;o<shu.length-1;o++){ for(var a = 0;a<shu.length-1-o;a++){ if(shu[a]>shu[a+1] ){ var zhong; zhong = shu[a]; shu[a] = shu[a+1]; shu[a+1] = zhong; } } } console.log(shu);
思路就是 我们先把第一个数跟第二个数比较 哪个大,哪个放在后面 然后第二个数再跟第三个数比较,大的放在后面
这样一轮循环下来,最大的数已经被我们换到了后面,进行第二次循环,要注意的是第二次循环,我们只需要除最大的数之外的其他数循环就好了,这样每次循环都少一个数
要注意的是在交换位置的时候 需要设置一个中间变量来存放数值
var zhong;
zhong = shu[a];
shu[a] = shu[a+1];
shu[a+1] = zhong;
这样才能把shu[a]和shu[a+1]交换位置