Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归函数中的Return不会中断循环_Javascript_Recursion - Fatal编程技术网

Javascript 递归函数中的Return不会中断循环

Javascript 递归函数中的Return不会中断循环,javascript,recursion,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.len

我现在是一名学习递归和归纳法的学生,我现在陷入了困境

我做了一个递归算法,它反转了我的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在jQuery1.6.4中试用的代码,则不需要包装

标题和按钮如下所示:

    <h1 id="title"> Should turn up here </h1>
    <input type="submit" id="byBtn" value="Do it" onclick="change()"/>

我希望任何人都能帮助我

在每次调用reverse2d时,看看xfirst、xlast、yfirst和ylast的值是什么都会很有帮助。在这一次调用中,它将xfirst、yfirst统计为0,0,而xlast、ylast作为数组的结尾,它是2,3。第一个加起来是0,1到0,2到0,3,然后是1,0,1,1和1,2。而另一个倒计时为2,3到2,2到2,1到2,0到1,3到1,2。当满足IF语句时,也就是说如果X和yfirst都相等,yfirst>=ylast,这意味着它是一半。然后它运行到返回,返回到最后一个例程并继续运行。我需要它停止并将地图返回到它在标题中显示的位置,就像在change函数中一样。Fiddle-link:我认为您希望在第二个递归调用之前放置一个else。在函数reverse2d的第一个条件语句中,您有一个&这不应该是逻辑And吗&&