递归算法伪代码

时间:2017-03-26 00:34:32

标签: algorithm recursion time-complexity pseudocode asymptotic-complexity

我想创建一个以O(logn)复杂度执行的递归伪代码 我希望它找到较低的f(i)&lt; 0和f [1 .... n]其中f(1)> 0且f(n)<0

prodedure fanc(A[n] , p , q )  //(this is my array,first digit of A ,last digit of A)
if A[n/2] >= 0
     return fanc(A[n/2] , A[n/2] , A[n-1])
else
     return fanc(A[n/2] , A[0] , A[n/2 -1])
if p<q
   print p
else
   print q

我知道不知何故我必须结束递归。此外,我想知道我是否在正确的道路上,如果你对这个问题有任何好的想法!

https://stackoverflow.com/questions/42935621/algorithm-in-ologn复制的更好的作业文字:

  

假设整数函数f:{1,2,3 ... n}是单调的并且在{1,2,3 ... n}中定义,并假设f(1)> 0和f(n)&lt;我们希望找到f(i)<0的最小整数i。 0.为此目的设计一个在O(logn)中运行的算法。

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,你必须相对于p和q(从和到)而不是n。然后,如果从==到你找到了解决方案。这假设总是存在[1 ... n]范围内的解决方案。

function firstNegative(f, from, to) {
    if (from == to)
        return from;
    next = from + (to - from) / 2;
    if (f(next) >= 0)
        return firstNegative(f, next + 1, to);
    else
        return firstNegative(f, from, next);
}
print firstNegative(f, 1, n);