long firstBadVersion(long n, long stepsize) { if (stepsize == 1 && isBadVersion(n)) return (n); if (!isBadVersion(n)) { long jumpto = n+stepsize; if (jumpto > number && stepsize == 1) { return number; //error case } else if (jumpto > number) { return firstBadVersion(n+1, 1); } else { return firstBadVersion(jumpto, stepsize*2); } } return firstBadVersion(n-(stepsize/2)+1, 1); }
int main(int argc, char **argv) { int n = 20; int i = 0; int result = 0; for(i = 1; i < n; i++) { call_times = 0; result = firstBadVersion(i); printf("n = %d, result = %d, call %d times\n", i, result, call_times); } return 0; }
int firstBadVersion(int n) { //if (isBadVersion(1)) return 1; number = n; return firstBadVersion(1, 1); }
int main() { firstBadNum = 1702766719; cout << firstBadVersion(2126753390) << endl; return 0; }