比如遍历以下一维数组:
复制代码 代码如下:
[javascript] view plaincopyprint?
var a1 = [1];
var a2 = [1, 2];
var a3 = [1, 2, 3];
虽然它们长度不一,但循环应付它们非常容易,也很优雅:
复制代码 代码如下:
[javascript] view plaincopyprint?
var dumpArrayByLoop = function(a) {
for (var i = 0; i < a.length; i++) {
println(a[i]);
}
};
如果改用递归,则看起来比较别扭:
复制代码 代码如下:
[javascript] view plaincopyprint?
var dumpArrayByRecur = function(i, a) {
if (i < a.length) {
println(a[i]);
dumpArrayByRecur(i + 1, a);
}
};
它们能输出同样的结果,但相比之下递归版本看起来很笨拙。
现在想想,如果元数据变化了:维度扩大到二维。
复制代码 代码如下:
[javascript] view plaincopyprint?
var a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
此时需要再外面再套一层循环变成双重循环:
复制代码 代码如下:
[javascript] view plaincopyprint?
var dumpArrayByLoop = function(a) {
for (var i = 0; i < a.length; i++) {
for (var j = 0; j < a[i].length; j++) {
println(a[i][j]);
}
}
};
如果数据的维度再继续扩大,变成三维、四维……甚至动态的N维数组。使用循环该怎么处理呢?
在这种“层数”很深,甚至不确定的情况下,就需要用“递归”来解决跨“层”的问题。
复制代码 代码如下:
[javascript] view plaincopyprint?
var isArray = function(a) {
return Object.prototype.toString.call(a) === '[object Array]';
};
var dumpArrayByRecur = function(a) {
if (isArray(a)) {
for (var i = 0; i < a.length; i++) {
dumpArray(a[i]);
}
} else {
println(a);
}
};
上面的代码中,如果发现子节点是一个数组,就使用递归进入下一层;而同一层上的遍历则使用循环来完成。
循环,递归
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。