0

谁能帮我理解递归?我想递归地读取矩阵,但我真的不知道如何。

我制定了一个将迭代算法转换为递归算法的计划,步骤如下:

  1. 重复结构->如果随后回忆起身体某处的功能
  2. 从“顶部”到 0 并返回到类似的迭代方式(我是这个概念的新手,这个想法可能很愚蠢)

我递归读取矩阵的函数(不工作)如下:

void read_m(int n,int m)
{
    if(n)
    {
        if(m)
        {
            read_m(n,m-1);
        }
        f>>v[n][m]; 
        read_m(n-1,m);
    }
}

我知道错误是什么,我不知道我应该如何解决这个问题。提前致谢。

PSnm是宽度和高度

4

3 回答 3

0

在这里使用递归可能不是最好的方法,但假设你想要它并且你想要'f'对所有元素执行,当 n 为 0 时它不会工作,因为它在if(n)块内。

于 2013-01-03T17:32:11.277 回答
0

首先,如果 (n) 阻塞,您应该移出f>>v[n][m];,否则它不会用索引 0 填充整行。

第二个假设你逐行保存数据,你应该在递归之前读取数据,为了防止重复读取,你应该只在读取整列时减少行。

void read_m(int n,int m)
{
    f>>v[width-1-n][height-1-m]; //suppose that width and height defined elsewhere
    if(m)
    {
        read_m(n,m-1);
    }
    else if(n)
    {
        read_m(n-1,m);
    }
}

如果它是逐列的,您应该在代码中更改 m 和 n。

于 2013-01-03T21:58:04.023 回答
0
#include<fstream>
using namespace std;

ifstream f("recurs.in");
ofstream g("recurs.out");

int a[20][20],n,m;

void read(int i, int j)
{
    if(j>1)
        read(i,j-1);
    else if(i>1) 
        read(i-1,j);
    f>>a[i][j];
}
int main()
{
    int i,j;
    f>>n>>m;
    read(n,m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            g<<a[i][j]<<' ';
        g<<endl;
    }
}

在职的

于 2013-01-04T22:35:24.793 回答