此代码适用于迷宫,但我不知道它是如何工作的。有人可以解释一下“if”代码块是如何工作的吗?

This code works for maze but i dont know how it works. Can somebody explain how does it work that " if" code block?

#include<stdio.h>

int main() {
    int x = 0, y = 0;
    int maze1[4][4] = { { 1, 0, 0, 0 }, { 1, 1, 1, 1 },  { 0, 1, 0, 0 },  { 1, 1, 1, 1}}; // The maze which is should be solved.

    int maze[4][4];

    for (int k = 0; k < 4; k++) { //Creating 4*4 matrix
        for (int l = 0; l < 4; l++) {
            maze[k][l] = 0;
        }
    }

    printf("\n\n\n");

    sol(maze, x, y, maze1);
    for (int k = 0; k < 4; k++) {
        for (int l = 0; l < 4; l++) {
            printf("%3d", maze[k][l]);
        }
        printf("\n");
    }
    return 0;
}

int sol(int maze[4][4], int x, int y, int maze1[4][4]) {
    if (x < 4 && x >= 0 && y >= 0 && y < 4 && maze[x][y] == 0 && maze1[x][y] == 1) { 
        maze[x][y] = 1;
        if (x == 3 && y == 3) {
            return 0;
        }
        if (sol(maze, x + 1, y, maze1) == 1) //How does it works ?
            return 0;
        if (sol(maze, x, y + 1, maze1) == 0) // How does it works ?
          return 0;
        else {
            maze[x][y] = 0;
            return 0;
        }
    }
}

您标记的行是简单的函数调用。调用的函数是当前正在执行的函数这一事实不是问题。这称为 递归 函数调用。您可以在维基百科和其他地方阅读有关 recursion 的信息。递归调用获取自己的参数和局部变量。

例如,假设您想计算不超过给定整数的所有非负整数的总和。嗯,你可以定义如下:

int sum_up_to(int i) {
   if (i <= 0)
      return 0;
   else
      return i + sum_up_to(i-1);
}

所以,

  • sum_up_to(0) returns 0.
  • sum_up_to(1)returns1 + sum_up_to(0)也就是1 + 0也就是1.
  • sum_up_to(2)returns2 + sum_up_to(1)也就是2 + 1也就是3.
  • sum_up_to(3)returns3 + sum_up_to(2)也就是3 + 3也就是6.
  • sum_up_to(4)returns4 + sum_up_to(3)也就是4 + 6也就是10.