迭代/递归搜索数组

时间:2018-04-10 18:55:33

标签: c arrays search iteration

我想编写一个搜索函数,可以递归搜索一个或多个元素的数组:如果多个元素是“活动的”,它应该迭代它们;如果只有一个,只返回那个元素。 到目前为止我所拥有的是:

#include <stdio.h>
#define NUM 10
int GetNext(int curr);

typedef struct test_s {
    int actv;
} test_t;

static test_t now[NUM] = {0};

int main(void)
{
    int curr = 0;
    now[1].actv = 1;
    //now[2].actv = 1;
    //now[5].actv = 1;
    //now[9].actv = 1;
    while (1)
    {
        curr = GetNext(curr);
        printf("curr %d\n",curr);
        sleep(1);
    }

    return 0;
}

int GetNext(int curr)
{
    ++curr; //increment index
    if (curr==NUM){
        curr = 0; //rollover
    }
   if (now[curr].actv ==1)
       return curr;
   else{
       for (;curr<NUM;curr++)
           if (now[curr].actv == 1)
               return curr;
   }
   return -1;
}

现在,如果数组中有一个或多个活动元素,我不希望它返回-1 ...但是如果没有活动元素只返回-1,否则它应该从0开始(在达到NUM之后) 1)。我最好怎么做呢?

2 个答案:

答案 0 :(得分:2)

你需要在循环内部重置为0,然后进行循环测试,看看你是否回到了你的起点。

public class DataClient {

public static void main(String[] args) {

    System.out.println(CalculationCache.getScore());
  }
}
class CalculationCache{

static{

    computeScore();
}

private static int score;

public static int getScore() {

    computeScore();
    return score;
}

private static boolean flag=false;

static void computeScore(){

    if(!flag) {
        //calculate the score
        for (int i = 0; i < 1000; i++) {
            score = score + i;
            flag = true;
        }
    }

 }
}

答案 1 :(得分:0)

做这样的事情:

df[!apply(df, 1, function(x) sum(grepl('cat', x))),]