如果我有2个函数作为变量,f1和f2 - 我如何确定2个函数对所有输入的行为是否相同?也就是说,它们将为所有输入返回相同的值。
答案 0 :(得分:0)
任意功能都不可能。
例如,考虑Collatz功能( n 如果 n 是奇数或 n / 2 < 3n + 1 em>如果 n 是偶数)。假设所有正整数最终都在循环 4-> 2-> 1 中结束。假设您的函数用于指示输入到达的周期(或指示它是否永远不会达到周期)。 f1
可能只打印 4-&gt; 2-&gt; 1 ,但f2
可能会重复应用该功能,直到检测到一个周期(还有一些其他情况可以确定它是否存在)不在一个循环中)。目前还没有f1
和f2
给出不同答案的已知输入,但不知道这样的输入是否存在。
答案 1 :(得分:0)
一种方法是编写函数,该函数比较已经给出相同输入参数的一些其他函数的输出。可以将可能的输入参数推送到数组中以简化该过程。有点像...
var func1 = function(inputValue) {
// return some stuff
};
var func2 = function(inputValue) {
// return some stuff
};
var inputArray = [/* some input values */];
function compare(array) {
var isSame = false;
for (var i = 0; i < array.length; i++) {
if (func1(array[i]) === func2(array[i]) {
isSame = true
} else {
return i
}
}
return isSame
}
var result = compare(inputArray);
if (typeof result === 'number') {
alert('Comparison failed at inputArray['+result+'] : ' + inputArray[result])
} else {
alert('Comparison success!')
}
compare()
函数返回两个不同的类型结果,具体取决于if条件。如果满足所有if条件,我们得到boolean
(true),否则for循环停止并返回比较失败的索引number
- 然后可以用来指回输入破坏链条的价值。
答案 2 :(得分:0)