JS---函数递归基础练习题

1.创造50个div,要求div是正方形,随机大小,随机在页面的任意位置(1400*720),随机颜色

<script>
    function getRandomColor() {
        var color="#";
        for(var i=0;i<3;i++){
            var str=parseInt(Math.random()*256);
            if(str<16){
                str="0"+str.toString(16);
            }else {
                str=str.toString(16);
            }
            color+=str;
        }
        return color;
    }


    function createDiv(w,h,bg,lefts,tops) {

        var style="width:"+w+"px;height:"+h+"px;background-color:"+bg+";position:absolute;top:"+tops+"px;left:"+lefts+"px";
        var div="<div style="+style+"></div>";
        return div;

    }
    for(var i=0;i<20;i++) {
        var h=Math.random()*200;
        var bbb=createDiv(h,h, getRandomColor(),Math.random()*1400,Math.random()*720);
        document.write(bbb);
    }

</script>

2.修改第一个,初始的时候没有任何div,点击document,创建一个新的div,随机所有

<script>
    function getRandomColor() {
        var color="#";
        for(var i=0;i<3;i++){
            var str=parseInt(Math.random()*256);
            if(str<16){
                str="0"+str.toString(16);
            }else {
                str=str.toString(16);
            }
            color+=str;
        }
        return color;
    }

    function creatDiv(w,h,bg,l,t){
        var style="width:"+w+"px;height:"+h+"px;background-color:"+bg+";position:absolute;left:"+l+"px;top:"+t+"px;";
        var div="<div style="+style+"></div>"
        randomDiv+=div;
        document.documentElement.innerHTML= randomDiv;
    }

    var randomDiv="";
    document.addEventListener("click",clickHandler);
    function clickHandler(e) {
        var h=Math.random() * 200;
        creatDiv(h, h, getRandomColor(), Math.random() * 1400, Math.random() * 500);
    }

</script>

3.利用递归求100的阶乘

<script>

    /*
        使用递归 求n的阶乘
        假设 写好了一个函数 fn
        1:1
        2:1*2  ->fn(1)*2
        3:1*2*3 ->fn(2)*3
        4:1*2*3*4 ->fn(3)*4
        ...
        n:1*2*3...*n ->fn(n-1)*n
    */
    function fn1(n) {
        // 条件是
        if(n==1){
            return 1;
        }
        return fn1(n - 1) * n;
    }
    var result = fn1(100);
    console.log(result);
    </script>

4.利用递归求两个数字的最大公约数

<script>
 /*   首先确定如何求最大公约数,我们采用欧几里得算法(辗转相除法),算法描述如下:
例:48,57
    57%48=9     大数对小数求余
    48%9=3       小数对上次的余数求余,重复这个过程直到余数为0

    9%3=0         余数为0时,此次求余的小数就是最大公约数*/
    //功能:求两个数的最大公约数 //参数:两个数: //返回值:最大公约数
    function f(m,n) {
        //大数能否整除小数,
        if (m > n) {
            var max = m;
            var min = n;
        } else {
            var min = m;
            var max = n;
        }
        if (max % min == 0) {
            //1、如果能整除,小数就是最大公约数
            return min;
        } else {
            //2、如果不能整除,那就求小数和余数的最大公约数
            return f(min, max % min);
        }
    }
    var result = f(48,57);
    console.log(result);
</script>

5.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数求/1+1/3+…+1/n;

<script>
function fnPrint(n){
var sum = 0;
if(n%2==0){
    i = 2;
}
else{
i = 1
}
while(i <= n){
sum+= 1/i;
i = i+2;
}
return sum;
}
var s = fnPrint(2)
alert(s);
</script>

猜你喜欢

转载自blog.csdn.net/weixin_41086056/article/details/88015014
今日推荐