int a = a_inicial; // Tiene que ser f(a) >= f(a+1), para que sea uno que NO cumple la propiedad. int b = b_inicial; // Tiene que ser f(b) < f(b+1), para que sea uno que SI cumple la propiedad. while (b-a > 1) { int c = (a+b)/2; if (f(c) < f(c+1)) b = c; else a = c; } // b es el primero que cumple, y por lo tanto f(b) es el minimo valor de f return f(b);