无法将数组传递给递归函数c ++

时间:2014-12-04 04:56:09

标签: c++ arrays

当我在其自身内部运行“check_row”函数时,我尝试传入数组“sudoku_temp”的方式存在问题,但我不确定我做错了什么。我错过了什么吗?

int check_row(int j_position, int generated_value, int sudoku_temp[][9]){
for (int i_position = 0; i_position < 9; i_position++)
{
    if (generated_value == sudoku_temp[i_position][j_position])
    {
        generated_value = generate_number();
        check_row(j_position, generated_value, sudoku_temp[][j_position]);
    }
    else
        return generated_value;

}

}

澄清一下,问题是当我尝试在其自身内部调用函数时。感谢。

2 个答案:

答案 0 :(得分:0)

使用变量而不是固定长度,如9.因为在递归中,参数可能不同。

int check_row(int j_position, int generated_value, int sudoku_temp[][n])
{
    for (int i_position = 0; i_position < n; i_position++)
    {
        if (generated_value == sudoku_temp[i_position][j_position])
        {
            generated_value = generate_number();
            check_row(j_position, generated_value, sudoku_temp[][j_position]);
        }
        else
            return generated_value;

    }
}

答案 1 :(得分:0)

如果要从数组中提取值,则不能像处理那样留下空括号。另一方面,功能原型看起来很相似,它完全没问题。为什么呢?

int sudoku_temp[][9] // A 2D array of integers second dimension of which is of size 9

或者换句话说,一个大小为9的数组(大小未知)。我们没有告诉编译器数组到底有多大,在这种情况下我们不必这样做,因为它只是简单地给出了以我们为参数。

另一方面,当访问元素时,我们不能留空括号,原因很简单:我们想要访问一个元素,编译器必须知道哪一个。切入追逐 - 删除空[]应解决您的问题。