具有递归调用的线性搜索算法?

时间:2012-04-16 07:49:09

标签: c recursion

我正在做一些练习,以便我可以通过递归的东西。其中一个是我试图用递归重写线性搜索。这是:

int linearSearch(int a[], int n, int key)
{
    if (n < 0 ) 
    {
          return -1;
    }
    if(key == a[n-1])
    {
           return n - 1;
    } 
    linearSearch(a, n-1, key); // Line 1
}

如果代码没有return语句,则代码无法正确执行。我不明白为什么我们需要将return语句放在第1行?在这种情况下,我们需要递归调用只是为了将n减少1吗?

4 个答案:

答案 0 :(得分:5)

linearSearch(a, n-1, key); // Line 1

你应该return来自递归调用的值:

return linearSearch(a, n-1, key);

否则,答案不会冒泡到函数的第一次调用,也不会作为原始调用者的“回答”返回。

返回n-1-1的基本子句 - 只是将其返回给调用者,这是相同的函数!但是如果没有从那里返回它,它将永远不会到达原来的来电者。

答案 1 :(得分:1)

对于n = 0,以下行可能会崩溃(或产生意外的值):

if(key == a[n-1])

你应该将你的第一个if语句改为:

if (n <= 0 ) 

答案 2 :(得分:0)

如果函数没有将其赋值给变量,则无法调用具有某种返回类型的函数。第1行中的陈述linearSearch(a, n-1, key); 由于函数具有返回类型,因此该语句无效。 你应该在第1行写下return linearSearch(a, n-1, key);

答案 3 :(得分:0)

Imagina这个功能(也许有帮助)

int fortytwo(void) {
    if (0) return 0; /* make the compiler less sad */
    42;
}