C
int intRac(long long n, long long guess) {
long long newGuess = (n/guess + guess)/2;
if( newGuess == guess ) return 1;
return intRac(n, newGuess)+1;
}
int intRac(long long n, long long guess) {
long long newGuess = (guess+n/guess)/2;
return newGuess==guess? 1 : intRac(n, newGuess)+1;
}
int intRac(long long n, long long guess) {
long long prevGuess = 0;
int step = 0;
while( guess != prevGuess) {
prevGuess = guess;
guess = (guess+n/guess) / 2;
step++;
}
return step;
}
Kotlin
package hero
fun intRac(n:Long, guess:Long):Long {
val newGuess = (n / guess + guess) / 2
if( newGuess == guess ) return(1)
return intRac(n, newGuess)+1
}
package hero
fun intRac(n: Long, guess: Long): Long {
tailrec fun iter(i: Long, guess: Long): Long {
val nextGuess = (guess + n / guess) / 2
return if (guess == nextGuess) i else iter(i + 1, nextGuess)
}
return iter(1, guess)
}
R
intRac <- function(n, guess) {
newGuess = (n %/% guess + guess) %/% 2
if( newGuess == guess ) return(1)
intRac(n, newGuess)+1
}
intRac <- function(n, guess) {
cnt = 0
prevGuess = -1
while( guess != prevGuess ) {
prevGuess = guess
guess = (n %/% guess + guess) %/% 2
cnt = cnt + 1
}
cnt
}
intRac <- function(n, guess) {
if( floor(sqrt(n)) == guess ) return(1)
intRac(n, floor((guess*guess+n)/2/guess))+1
}