1.有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析: 兔子的规律为数列: 1 1,2,3,5,8,13,21,34,表示了一种动植物数量的正常增长的数量变化
月份: 1 2 3 4 5 6 7 8 9 10
第一种方法:使用递归——但这种方法递归调用的效率非常低。
1 function dd(n){ 2 if (n < 3) {return 1;} 3 if(n >= 3){//这里注意n还有等于3的情况,不然会导致递归中断 4 return (dd(n-1)+dd(n-2)); 5 } 6 } 7 console.log(dd(10));
第二种方法:使用循环
1 // f(n-2)+f(n-1) = f(n) 2 // 1 1 2 n=3 3 // 1 2 3 n=4 4 // 2 3 5 n=5 5 // 3 5 8 n=6 6 7 function dd(n){ 8 var a =1,b=1,c=1; 9 for(var i =3;i <= n;i++){ 10 a =b; 11 b =c; 12 c= a+b; 13 } 14 return c; 15 } 16 console.log(dd(6));
这种方式更加巧妙。
2.将一个正整数分解质因数。例如:输入 90, 打印出 90=2*3*3*5 。
1 function fenjie(n){ 2 var arr=[]; 3 for(var i =2;i < n/2;i++){ 4 while(n % i == 0){while循环在指定条件为true时,就一直执行;不满足的话,就跳出循环 5 arr.push(i); 6 n/=i;//此处不断的循环 7 } 8 } 9 return arr.join('*'); 10 } 11 console.log('90 = ' + fenjie(90));
3.要求输出国际象棋棋盘。
在这里使用嵌套循环。
1
//外层循环控制行
for(var i = 0,str ='';i<8;i++){ 2 //内层循环控制列 3 for(var j = 0;j< 8;j++){ 4 //拼接一个正方形:如果r+c为偶数;就拼接空心方块,否则拼接实心方; 5 str += (i+j)%2 ==0?'□':'■'; 6 } 7 str+=' '; 8 } 9 console.log(str);
实现效果:
在这里我们比较了几种情况,需要分析下:
输出情况:会输出每一次循环的值:
修改代码后:
输出:
修改代码:
输出:
修改代码:
输出: