我正在做一些练习,以便我可以通过递归的东西.其中一个是我试图用递归重写线性搜索.这里是:
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
}
Run Code Online (Sandbox Code Playgroud)
如果代码没有return语句,则代码无法正确执行.我不明白为什么我们需要把return声明放在第1行?在这种情况下我们需要递归调用只是为了将n减少1吗?
linearSearch(a, n-1, key); // Line 1
Run Code Online (Sandbox Code Playgroud)
你应该return从递归调用的值:
return linearSearch(a, n-1, key);
Run Code Online (Sandbox Code Playgroud)
否则,答案不会冒泡到函数的第一次调用,并且不会作为原始调用者的"答案"返回.
返回的基本子句n-1或-1- 只是将它返回给调用者,这是相同的功能!但是如果没有从那里返回它,它将永远不会到达原来的呼叫者.