如何在递归函数中编写矩阵?

费德里科·伦巴多(Federico Lombardo)

当我在函数内部声明矩阵时,示例:int recur(int mat [] [],int ....)为什么编译器返回错误,但是使用数组,它可以正常工作吗?

光碟

编译器需要知道除第一个尺寸外的所有尺寸,以便计算偏移量。认为二维数组具有行和列。int mat[4][5]有4行5列。

在这种情况下,这就是数组在概念上的样子。每个数字都是我们在数组中找到对应元素的索引:

 0  1  2  3  4
 5  6  7  8  9
10 11 12 13 14
15 16 17 18 19

但是,它在内存中的实际布局方式是由20个元素组成线性序列:

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19

访问mat[2][3]告诉编译器在此处定位元素13(第二行,第三列,从零开始)。它通过乘以来实现2*5 + 3 == 10 + 3 == 13注意,为了执行此计算,必须知道列数。

如果您有假设变量int mat[][]并且尝试索引,mat[2][3]那么编译器如何执行此计算?它不知道数组有多少列。它根本无法计算元素的线性偏移,因为它没有足够的信息来执行此操作。

请注意,在上面的示例中未使用第一维度(4);编译器不需要知道此维,因为系数隐式为1。

这就是为什么必须知道除第一维以外的所有维数的原因。第一维是唯一具有隐含系数的维。

一种解决方案是使函数成为模板:

template <int N>
int recur(int mat[][N]) {
    // ...
}

当使用二维数组调用时,编译器将使用此模板实例化具有的适当值的函数版本,N函数主体将在对数组建立索引时将其用作乘法系数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MoonScript中编写递归函数?

来自分类Dev

如何在MoonScript中编写递归函数?

来自分类Dev

如何在Swift中编写此递归函数?

来自分类Dev

如何在Haxe中编写相互递归函数

来自分类Dev

如何在Ruby中编写递归阶乘函数?

来自分类Dev

如何在Haxe中编写相互递归函数

来自分类Dev

如何在matlab中编写嵌套递归函数

来自分类Dev

如何在Matlab中编写此矩阵,

来自分类Dev

如何在Matlab中编写变化的矩阵?

来自分类Dev

如何在R中编写递归函数以生成动态嵌套的for循环?

来自分类Dev

如何正确编写递归函数?

来自分类Dev

如何编写在Swift中采用CollectionType的通用递归函数?

来自分类Dev

如何在Matlab中记忆递归函数

来自分类Dev

Python如何在递归函数中求和?

来自分类Dev

如何在递归函数中打印矢量?

来自分类Dev

如何在递归函数中存储数组?

来自分类Dev

如何在JavaScript中停止递归函数?

来自分类Dev

如何在递归函数中获得总数

来自分类Dev

如何在javascript中调用递归函数

来自分类常见问题

如何在Rust中编写函数?

来自分类Dev

如何在Vim中编写`tabline`函数?

来自分类Dev

如何在PostgreSQL的函数中编写WITH(CTE)

来自分类Dev

如何在C ++中编写哈希函数?

来自分类Dev

如何在Haskell中编写showIt函数?

来自分类Dev

如何在Vim中编写`tabline`函数?

来自分类Dev

如何在PhpStorm中编写函数注释?

来自分类Dev

如何在Java中编写重载函数

来自分类Dev

如何在php中编写bann函数?

来自分类Dev

如何在Vim中编写`tabline`函数?