如何使用递归访问n维数组

时间:2014-03-20 06:40:09

标签: c arrays recursion multidimensional-array

我设置x是包含几个变量的数组,它们是评估函数的输入。每  变量具有xBoundary[index][min,max]中定义的限制。每个可能的变量值都具有步长xStep[]

e.g。自x[0]0以来,10介于xBoundary[0][0]=0xBoundary[0][1]=10之间。 xStep[0]=0.5然后x的值可能为0,0.5,1,1.5,.....9.5,10。 如何访问x的所有可能值?我认为这是一个n维数组n = length of x

以下是我的代码。它是无限循环。

#include <stdio.h>

#define nx_SIZE 2                   // dimension of x

double x[nx_SIZE] = {0};                     // Initialize x
double xBoundary[nx_SIZE][2]={{0,5},{2,5}};  //Contains lower and upper boundary of x.
                                             //xBoundary[][0]=min
                                             //xBoundary[][1]=max
double xStep[nx_SIZE]={1};                   //Step size for variable in x.

void iterate(int dimension) {


  int i = dimension - 1;
  double currentX, upperLimit;

  if (i == -1){

    printf("x: %f %f \n", x[0], x[1]);
    //evaluate();

  } else {

    currentX = xBoundary[i][0];
    upperLimit = xBoundary[i][1];

    while (currentX < upperLimit){
      x[i] = currentX;
      iterate(i);
      currentX = currentX + xStep[i];
    } //End of while

  }
}

int main (){

  iterate(nx_SIZE);

  return 1;
}

2 个答案:

答案 0 :(得分:0)

根据您的要求,这只是nxSize次的示例循环。尝试下面的代码(我没有测试它,你可能需要一些更新)

int i;
for (i = 0; i < nx_SIZE; i++) {
    int v;
    for (v = xBoundary[i][0]; v <= xBoundary[i][1]; v += xStep[i]) {
        printf("%f", v);
    }
    printf("\n");
}

上面的代码基于nx_SIZE = 2,在你的例子中,如果nxSIZE是另一个值,你应该正确初始化xBoundary以使其工作。

答案 1 :(得分:0)

我发现问题是由double xStep[nx_SIZE]={1};引起的。这仅将xStep[0]值分配给1,其余为0。零增量导致无限循环。

x的值是n维数组n = length of x

#include <stdio.h>

#define nx_SIZE 2                              // dimension of x

double x[nx_SIZE] = {0};                       // Initialize x
double xBoundary[nx_SIZE][2]={{0,5},{2,5}};    //Contains lower and upper boundary of x.
                                               //xBoundary[][0]=min
                                               //xBoundary[][1]=max
double xStep[nx_SIZE]={1,1};                   //Step size for variable in x.
int counter = 0;                               //Number of possible x

void iterate(int dimension) {

  int i = dimension - 1;
  double currentX;

  if (i == -1){
    printf("x: %f %f \n", x[0], x[1]);
    counter++;
  } else {

    for (currentX = xBoundary[i][0]; currentX <= xBoundary[i][1]; currentX += xStep[i]) {
      x[i] = currentX;
      iterate(i);
    }

  } //End of if
} // End of iterate

int main (){

  iterate(nx_SIZE);
  printf("counter: %d", counter);
  getchar();

  return 1;
}