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

本文深入探讨了JavaScript编程中的多项实用技巧,包括动态创建元素、响应式事件处理、递归算法应用,以及数学运算的解决方案。通过具体示例,如随机生成div元素、求阶乘与最大公约数等,展示了JavaScript在网页交互与复杂计算任务中的强大能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值