我是初学者,这是我在这里发表的第一篇文章(加上我不是母语为英语的人),所以如果我的代码和/或我的英语不好,请原谅我。给我两个数字我想写一个JavaScript函数找出第二个是否是第一个的幂,然后确定该功率(例如:2.8输出必须为3)。我写了两个函数,都工作,但我不能把它们放在一起。
这是第一个检查第二个数字是否是第一个数字的力量。
function checkNumbers(x,y){
if (y%x !==0){
return "this numbers are not valid"
}
else if(x===y) {
return "correct!"
}
else {
y=y/x
return checkNumbers(x,y)
}
}
checkNumbers(2,8) // will give the first answer
checkNumbers(2,18) // will give the second answer
第二个函数将给出积分对数:
count =1;
function findGrade(x,y) {
if(y/x===1)
return "the grade is " + count;
count++;
y = y/x;
return findGrade(x,y)
}
findGrade(2,8) // output 3
findGrade(2,16) // output 4
如何将它们组合成一个功能?我想我需要一个闭包,但我没有找到让它起作用的方法。
答案 0 :(得分:1)
checkNumbers
应返回布尔值,而不是消息。然后findGrade可以检查结果以查看它是否应该计算对数。像这样:
function checkNumbers(x,y){
if (y%x !==0){
return false
}
else if(x===y) {
return true
}
// the rest of your function remains the same.
function findGrade(x,y) {
// First, check to see whether y is a power of x
if checkNumbers(x,y) {
// your original findGrade function goes here
}
else
return -1; // Use this as a failure code.
这对你有用吗?
另一种可能性是完全结合这些功能:尝试找到对数(你称之为“等级”);如果它有效,你会得到答案;如果失败(在y%x !== 0
),则报告失败。
答案 1 :(得分:0)
我不确定我的方法是否不同,但我已经在下面实现了它。在实际应用程序中,我会对输入进行更多的类型检查,并检查是否存在第三个参数:如果不是默认值为0(第一次迭代默认计数为0),但这是一般的想法。您可以在下面运行代码段。
// Arguments
// 1: Base of Exponent
// 2: test Number
// 3: count by reference
function checkPower (base, test, count) {
let division = test/base
// base case
if (division === 1) {
count++
return count
} else if (division < 1) {
console.log("not a power")
return;
}
// iteration step
count++
return checkPower(base, division, count++)
}
// Test Cases
let test = checkPower(2, 32, 0)
if (test) {
console.log(test) // 5
}
test = checkPower(2, 1024, 0)
if (test) {
console.log(test) // 10
}
test = checkPower(2, 9, 0)
if (test) {
console.log(test) // "not a power"
}
答案 2 :(得分:0)
事实上,解决方案非常简单。
您可以执行以下操作:
function findGrade(x, y, count = 1) {
// If the numbers are not valid, throw an error. The execution is interrupted.
if(y % x != 0) throw "Invalid inputs";
// If the inputs are different, continue the execution and add 1 to count.
if(x != y) return findGrade(x, y/x, ++count);
// If none of the above are true, you have your result!
return count;
}
试验:
console.log(findGrade(2, 8)); // Outputs 3
console.log(findGrade(2, 16)); // Outputs 4
console.log(findGrade(2, 3)); // Error: Invalid inputs
console.log(findGrade(3, 3486784401)); // Outputs 20
如果您需要任何进一步的帮助,请与我们联系。