js递归(一)——自幂数、水仙花

自幂数定义
自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数)

自幂数包括:独身数、水仙花数、四叶玫瑰数、五角星数、六合数、北斗七星数、八仙数、九九重阳数、十全十美数

上代码

 let isSelfPower = num =>{
//此函数的功能是把字幕数添加的数组里面
            let v = [...num.toString()],
                l = v.length,
                p = v.reduce((p,c)=>{
                    return p+Math.pow(c,l)
                },0)
            if(p===num) selfPowerArr.push(num)
        },
        selfPowerArr = [],//保存字幕数的数组
        selfPower = (starNum,endNum,callback)=>{
            //starNum 开始数,endNum结束数,callback添加符合的字幕数到数组
            if(endNum-starNum>6000) {throw "超过最大调用堆栈大小"}
            //限制最大的递归调用
            else if (endNum<=starNum) {return false;}
            callback(starNum++);
            selfPower(starNum,endNum,callback)
        }
    selfPower(0,5999,isSelfPower)
    selfPower(6000,10000,isSelfPower);
    console.log(selfPowerArr);
//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474]

备注:最大调用堆栈大小我设置为6000 超过报错

你可能感兴趣的:(js递归(一)——自幂数、水仙花)