【问题标题】:Iterative/recursive search of array数组的迭代/递归搜索
【发布时间】:2018-09-20 12:16:18
【问题描述】:

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

#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)。我如何才能最好地做到这一点?

【问题讨论】:

  • 不想回-1就不要return -1;,还是我没看懂你的问题?
  • 你想返回/做什么而不是返回-1?
  • 抱歉,我不清楚....我希望它在 0 处重新开始...并且只有在没有元素处于活动状态时才返回 -1
  • curr 在 main 中未初始化
  • @smac89 你说得对,我修好了!

标签: c arrays search iteration


【解决方案1】:

您需要在循环内重置为 0,然后进行循环测试以查看您是否回到了开始的位置。

int GetNext(int curr)
{
    int start = curr;
    do {
      ++curr; //increment index
      if (curr==NUM){
          curr = 0; //rollover
      }
      if (now[curr].actv ==1)
          return curr;
   } while (curr != start);
   return -1;
}

【讨论】:

    【解决方案2】:

    做这样的事情:

    int GetNext(int curr) {
        int start = curr;
    
        for (curr++; curr != start; curr++) {
            if (curr >= NUM){
                curr = 0;
            }
    
            if (now[curr].actv == 1) {
                return curr;
            }
        }
        return -1;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多