Javascript平方函数

Javascript平方函数,javascript,recursion,Javascript,Recursion,我想写一个函数,检查给定的数字是否有特定的顺序 第二个数字必须是前一个数字的平方。 第一个数字只能是0-9 例如2439将返回'true',因为4是2的平方,9是3的平方 39416还将给出“true”,例如1624将返回“false” 我真的不知道怎么做。它应该是一个递归函数,但是一个没有递归的例子也很有用。我会尝试这样的方法: function isOrdered(input){ var position = 0; while(position<input.len

我想写一个函数,检查给定的数字是否有特定的顺序

第二个数字必须是前一个数字的平方。 第一个数字只能是0-9

例如2439将返回'true',因为4是2的平方,9是3的平方

39416还将给出“true”,例如1624将返回“false”


我真的不知道怎么做。它应该是一个递归函数,但是一个没有递归的例子也很有用。

我会尝试这样的方法:

function isOrdered(input){ 

    var position = 0;

    while(position<input.length-2)
    {

        var currentFirstNumber = parseInt(input[position]);

        if(currentFirstNumber<=2) {
            if (Math.sqrt(parseInt(input[position + 1])) !== currentFirstNumber)
                return false;
            else
                position+=2;
        }

       if(currentFirstNumber>=4 && currentFirstNumber<=9)
       {
           var squared = input.substring(position+1,position+3);

           if(Math.sqrt(parseInt(squared))!==currentFirstNumber)
               return false;
           else
               position=position+3;
        }
    }

    return true;
}

console.log(isOrdered("2439"));    // outputs true
console.log(isOrdered("39416"));   // outputs true
console.log(isOrdered("1624"));    // outputs false
按顺序排列的函数(输入){
var位置=0;

而(position如注释部分所述,OP表示“firsts”限制为0..9。因此实现这一点的最简单方法是通过
幂函数而不是
平方根函数


更新:很抱歉,您要求输入JavaScript代码。请注意
第一次调用
。如果手动将最后一个位置传递给函数,它将返回true

function verification(number, position){        
    var str = String(number);                        // Cast number to String
    if(str.length > position){                       // Verify valid position
        var value = str.substr(position, 1);         // take the 'first' value
        var pow = Math.pow(value, 2);                // Calculate the power
        // Verify if the next value is equivalent to the power
        if(str.indexOf(pow, position) == position + 1){   
            // Recursive call to verify the next position
            return verification(number, position + String(pow).length + 1);
        } else {
            // If not equivalent, you found an inconsistency. 
            return false;
        }
    // If you ran it until you reached the last position, you're good to go.
    }else if(str.length == position){
        return true;
    }
}

console.log(verification(39416, 0)); // True
console.log(verification(39415, 0)); // True
console.log(verification(981524, 0)); // false
console.log(verification(981525, 0)); // true
console.log(verification(98525, 0)); // false

看看这个递归函数

function detectOrder(input)
{
    var input = input.toString()
    var first = input.substr(0,1);
    var power = Math.pow(parseInt(first), 2);
    var powerLength = power.toString().length;
    if ( parseInt(input.substr(1, powerLength)) == power )
    {
        if (input.length <= 1+powerLength)
        {
            return true;
        }
        else
        {
            return detectOrder(input.substr(1+powerLength));
        }
    }
    else
    {
        return false;
    }

}
功能检测器(输入)
{
var input=input.toString()
var first=输入。substr(0,1);
var-power=Math.pow(parseInt(first),2);
var powerLength=power.toString().length;
if(parseInt(input.substr(1,powerLength))==power)
{

如果(input.length“firsts”数字将被限制在0到9的范围内?也就是说,平方数可以大于10,但要平方的数字总是小于10?很好的练习,ticky,如果“firsts”不象Marco所问的那样限制在
0..9
。我喜欢那些家庭作业。你能解释一下39416是如何实现的吗?3是第三个9.4的平方根是16的平方根。第一个数字实际上被限制为9。这对于OP提供的
39416
示例不起作用。这个示例给出了有序(“39982”)作为true@XGreen谢谢你的评论。我会努力找出哪里出了问题。@XGreen再次感谢你的注释。我犯了两个愚蠢的错误。一个在if条件中,另一个误用了string.substring:(。