Почему я не могу вернуться из рекурсивной функции? - PullRequest
0 голосов
/ 24 апреля 2019

Хорошо Stackoverflow первый пост здесь.Я в растерянности и буду признателен за любую помощь.

У меня есть рекурсивная функция, которая работает нормально, пока я не попытаюсь вернуться из нее.(Просто маленький лабиринт для развлечения)

При достижении оператора return кажется, что он возвращается к оператору if(grid[y+1][x] ===2).
Тогда я не вижу, чтобы функция снова вызывалась, но значениядля y и x начните изменяться, поскольку она зацикливается вокруг функции, прежде чем добраться до else внизу и вернуться туда.

Я также вижу «внутри return if if» в консоли, иустановка точек останова в браузере показывает, что вызывается оператор return, просто не выходит из функции.

Заранее большое спасибо !!!

const grid =[0,0,0,0,3,2], 
            [0,0,0,0,3,0],
            [0,0,0,0,3,0],
            [3,3,3,3,3,0],
            [0,0,0,0,0,0],
            [1,3,3,3,3,3]
        ],

const recursiveSearch = (y, x) => { // init values y=5 x=0


    console.log(y + '  ' + x);
    if(grid[y-1]){
        if(grid[y-1][x] === 0) {
            grid[y-1][x] = 4;
            recursiveSearch(y-1, x);
        }
        if(grid[y-1][x] === 2) {
            console.log('inside return if');
            return 'end point found at';
        }
    }
    if(grid[y][x+1] || grid[y][x+1] === 0) {
        if(grid[y][x+1] === 0) {
            grid[y][x+1] = 4;
            recursiveSearch(y,x+1);
        }
        if(grid[y][x+1] === 2) {
            return "end point found at";
        }
    }
    if(grid[y+1] || grid[y+1] === 0) {
        if(grid[y+1][x] === 0) {
            grid[y+1][x] = 4;
            recursiveSearch(y+1,x);
        }
        if(grid[y+1][x] === 2) {
            return "end point found at";
        }
    }
    if(grid[y][x-1] || grid[y][x-1] === 0 ) {
        if(grid[y][x-1] === 0) {
            grid[y][x-1] = 4;
            recursiveSearch(y,x-1);
        };
        if(grid[y][x-1] === 2) {
            return "end point found at";
        }
    } else {
        return "No solution found"
    }
};

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

вы должны вернуть значение вызывающей рекурсивной функции.

const grid =[0,0,0,0,3,2], 
            [0,0,0,0,3,0],
            [0,0,0,0,3,0],
            [3,3,3,3,3,0],
            [0,0,0,0,0,0],
            [1,3,3,3,3,3]
        ],

const recursiveSearch = (y, x) => { // init values y=5 x=0


    console.log(y + '  ' + x);
    if(grid[y-1]){
        if(grid[y-1][x] === 0) {
            grid[y-1][x] = 4;
            return recursiveSearch(y-1, x); // must return value of calling recursiveSearch
        }
        if(grid[y-1][x] === 2) {
            console.log('inside return if');
            return 'end point found at';
        }
    }
    if(grid[y][x+1] || grid[y][x+1] === 0) {
        if(grid[y][x+1] === 0) {
            grid[y][x+1] = 4;
            return recursiveSearch(y,x+1); // // must return value of calling recursiveSearch
        }
        if(grid[y][x+1] === 2) {
            return "end point found at";
        }
    }
    if(grid[y+1] || grid[y+1] === 0) {
        if(grid[y+1][x] === 0) {
            grid[y+1][x] = 4;
            return recursiveSearch(y+1,x); // must return value of calling recursiveSearch
        }
        if(grid[y+1][x] === 2) {
            return "end point found at";
        }
    }
    if(grid[y][x-1] || grid[y][x-1] === 0 ) {
        if(grid[y][x-1] === 0) {
            grid[y][x-1] = 4;
            return recursiveSearch(y,x-1); // must return value of calling recursiveSearch
        };
        if(grid[y][x-1] === 2) {
            return "end point found at";
        }
    } else {
        return "No solution found"
    }
};
0 голосов
/ 24 апреля 2019

Пожалуйста, добавьте оператор возврата для каждого рекурсивного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...