在递归函数中返回不会破坏循环

时间:2015-09-10 21:18:35

标签: javascript recursion

我目前是学生学习递归和归纳,我现在卡住了。

我做了一个递归算法,它反转了我的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()"/>

我希望有人能帮助我

0 个答案:

没有答案