- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用递归对大小为 n 的矩阵的周长求和。 (没有多次添加角)
我写的是无限循环,不排除角点。如何停止无限循环并排除角落?
int
sumPerimeter(int** matrix, int i, int j, int height, int width)
{
if (i == 0 && j == 0)
return matrix[i][j] + sumPerimeter(matrix, i + 1, j, height, width);
if (i == height && j == 0)
return matrix[i][j] + sumPerimeter(matrix, i, j + 1, height, width);
if (i==height&& j == width)
return matrix[i][j] + sumPerimeter(matrix, i - 1, j, height, width);
if (i == 0 && j == width)
return matrix[i][j] + sumPerimeter(matrix, i, j - 1, height, width);
}
我决定将其分成几个阶段以使其更容易,下面的代码是我目前的尝试。当我使用 visual studio 单步执行它时,它起作用了,但它总是返回矩阵中的第一个数字。
int
sumRight(int** matrix, int i, int j, int height, int width,int count)
{
if (0 > width)
return 0;
if (j > width - 1)
return count;
int sum = matrix[i][j];
count = sum + count;
sumRight(matrix, i, j + 1, height, width,count);
return count;
}
我弄清楚了为什么它没有返回正确的值。但我不知道如何让它不多次计算角点。对此有任何建议,我们将不胜感激。
最佳答案
如果您必须为此使用递归(这可能是个坏主意,因为您得到的很少,但出于教育目的可能没问题1),您可以选择一个简单的方法。
假设基本情况是高度为零的矩阵,重复情况是将第一行的总和与矩阵其余部分的总和相加。换句话说,类似于以下伪代码:
def sumOfMatrix (matrix m, int row, int height, int width):
# No rows left, return zero.
if row == height:
return 0
# Get sum of first row.
sum = 0
for col in 0..width-1 inclusive:
sum = sum + m[row][col]
# Return that plus sum of rest of matrix.
return sum + sumOfMatrix (m, row+1, height, width)
如果你真的想变得聪明,对于“聪明”这个词的一些奇怪的定义:-),你可以做两种完全不同类型的递归,一种用于一行,另一种用于矩阵:
def sumOfRow (matrix m, int row, int col, int width):
# No columns left, return zero.
if col == width:
return 0
# Get value plus sum of rest of row.
return m[row][col] + sumOfRow (m, row, col+1, width)
def sumOfMatrix (matrix m, int row, int height, int width):
# No rows left, return zero.
if row == height:
return 0
# Get sum of this row plus sum of all other rows.
return sumOfRow (m, row, 0, width) + sumOf (m, row+1, height, width)
1 如前所述,这可能是递归的错误用例,因为您可以简单地执行紧凑的迭代解决方案:
def sumOfMatrix (matrix m, int height, int width):
sum = 0
for row = 0..height-1 inclusive:
for col = 0..width-1 inclusive:
sum = sum + m[row][col]
return sum
但是,如果您需要一个递归解决方案(因为您是自学递归,或者您的教育者没有能力思考更好的现实世界问题),上面的递归代码应该足够了来帮助你。
关于c - 在不多次添加角的情况下对矩阵的周长求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306143/
好吧,这不起作用!有什么问题呢。有人可以向我指出吗?我已经盯着它看了好几个小时了。我之前寻求过帮助,他提出了结构,但我并没有真正理解它,所以它不起作用。 没有得到正确的计算。我认为读取文件时可能出现问
我需要显示一个圆周。为了做到这一点,我认为我可以为很多 x 计算 y 的两个值,所以我做了: import sympy as sy from sympy.abc import x,y f = x**2
3个不同的类 1个用于处理Circle实例,1个用于Square实例,第3个用于比较之间他们(main) 。在 main 函数中,我找到了 circle (在 c1..c4 之间)和 square (
我是一名优秀的程序员,十分优秀!