我目前是学生学习递归和归纳,我现在卡住了。
我做了一个递归算法,它反转了我的2d数组,除非我必须返回地图,它会一直持续到它自己,直到它重载。
有谁知道我怎么解决这个问题?因为我一直以为回到循环会“破坏”循环。
以下是代码:
var map = [[1, 2, 3, 4],
[ 9, 5, 6, 4],
[ 7, 8, 9, 2]];
function change()
{
var newmap = reverse2d(map, 0, 0, map.length - 1, map[0].length - 1);
var title = document.getElementById('title');
title.innerHTML = newmap.toString();
}
function reverse1d(map, first, last)
{
if(first < last)
{
var temp = map[first];
map[first] = map[last];
map[last] = temp;
reverse(map, first + 1, last - 1);
}
return map;
}
function reverse2d(map, xfirst, yfirst, xlast, ylast)
{
if(!((xfirst == xlast) & (yfirst >= ylast)))
{
var temp = map[xfirst][yfirst];
map[xfirst][yfirst] = map[xlast][ylast];
map[xlast][ylast] = temp;
if(ylast < 1)
{
var temp2 = yfirst;
yfirst = ylast;
ylast = temp2;
reverse2d(map, xfirst + 1, yfirst, xlast - 1, ylast);
}
reverse2d(map, xfirst, yfirst +1, xlast, ylast -1 );
}
console.log('print this before returning map');
return map;
}
在控制台中我可以看到“在返回地图之前打印这个”很多次。因此它不会跳出并将数组粘贴到指定的标题中。
如果您想尝试使用JSfiddle.net的代码,可以使用JQuery 1.6.4进行尝试,而且没有包装
标题和按钮如下:
<h1 id="title"> Should turn up here </h1>
<input type="submit" id="byBtn" value="Do it" onclick="change()"/>
我希望有人能帮助我