c - 如何在下一次递归调用中从二维数组中的下一列\行开始?(C)
问题描述
我正在尝试实现与此类似的目标:
int change(int coins[],int n,int sum)
{
if (n==0)return 0;
if (coins[0]==sum)return 1;
if (coins[0]>sum)return 0;
int options = change(coins+1,n-1,sum);//adding next value
int self_options = change(coins,n,sum-coins[0]);//adding the first value
return self_options+options;
}
我指的是这一行:
int options = change(coins+1,n-1,sum);
这使得递归的下一次迭代从数组的下一个元素开始。
我正在尝试使用 2d 数组实现类似的功能,但不知道如何操作。
可以说我有一个[N] [N]。如何在下一次递归迭代中从下一行或下一列开始?
谢谢!
解决方案
方法与一维数组类似,例如:
#include <stdio.h>
#define ROWS 3
#define COLUMNS 4
/* compute the sum of arr[row][0] .. arr[row][COLUMNS - 1] */
int sumRow(int (*arr)[COLUMNS], int row, int col)
{
return (col == COLUMNS)
? 0
: sumRow(arr, row, col + 1) + arr[row][col];
}
/* compute the sum of arr[0][col] .. arr[nRow][col] */
int sumCol(int (*arr)[COLUMNS], int row, int nRow, int col)
{
return (row == nRow)
? 0
: sumCol(arr, row + 1, nRow, col) + arr[row][col];
}
int main()
{
int arr[ROWS][COLUMNS];
for (int r = 0; r != ROWS; ++r) {
for (int c = 0; c != COLUMNS; ++c) {
arr[r][c] = 10*r + c;
printf("%3d", arr[r][c]);
}
}
printf("sum[2][*] = %d\n", sumRow(arr, 2, 0));
printf("sum[*][1] = %d\n", sumCol(arr, 0, ROWS, 1));
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra rc.c
pi@raspberrypi:/tmp $ ./a.out
0 1 2 3
10 11 12 13
20 21 22 23
sum[2][*] = 86
sum[*][1] = 33
20+21+22+23 = 86
1+11+21 = 33
当然,这里的递归可以很容易地删除,但这不是主题,并且请求了递归
推荐阅读
- c# - 具有 IDisposable 成员/属性的类
- ios - 以编程方式设置标题
- java - 区分一字、二字和三字命令
- python-3.x - 无法在 Python (pip) 中安装包
- javascript - 有什么方法可以使用 mustache 语法将参数传递给 Vue.JS 中的绑定变量
- python - 错误:EROFS:只读文件系统,在 Docker 上使用 Node-RED 在 Rpi 零上打开“/sys/class/gpio/export”
- python - 如何在 python 中删除带有 .log 扩展名的文件
- javascript - Firebase 简单查询给出错误:“在 JSON.stringify 将循环结构转换为 JSON”
- cocoa - 如何使用自定义字体?
- python - 如何将命令绑定到 Tkinter 中的 enter 键?