当我在其自身内部运行“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;
}
}
澄清一下,问题是当我尝试在其自身内部调用函数时。感谢。
答案 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的数组(大小未知)。我们没有告诉编译器数组到底有多大,在这种情况下我们不必这样做,因为它只是简单地给出了以我们为参数。
另一方面,当访问元素时,我们不能留空括号,原因很简单:我们想要访问一个元素,编译器必须知道哪一个。切入追逐 - 删除空[]
应解决您的问题。