如何使用以下代码,每次生成不同的输出(不是因为随机函数),但它为某些值(有时是其他值)提供了未定义的值。有什么问题?
function getRandom(ubound) {
return Math.floor((Math.random()*10) % ubound);
}
function getInterval() {
var interval = [getRandom(10), getRandom(10)];
if(interval[1] >= interval[0])
return interval;
else
getInterval();
}
function generateIntervals() {
for(var i = 0; i < n; i++)
intervals[i] = getInterval();
}
function printIntervals() {
for(var i = 0; i < n; i++)
console.log("Node " + (i + 1) + ": " + intervals[i]);
}
generateIntervals();
printIntervals();
我得到的输出如下:
Node 1: 0,9
Node 2: 0,3
Node 3: undefined
Node 4: 2,2
或
Node 1: 3,3
Node 2: 3,3
Node 3: 1,8
Node 4: undefined
答案 0 :(得分:7)
在递归函数中缺少return
:
if(interval[1] >= interval[0])
return interval;
else
return getInterval();
// ^^^^^^
虽然我个人只是交换2个值而不是使用递归。 =]
if(interval[1] >= interval[0])
return interval;
else
return [interval[1], interval[0]];
使用Array.reverse()
更简单/语义:
if(interval[1] < interval[0])
interval.reverse();
return interval;