Здесь две проблемы.
1.Когда x
становится на 1 меньше, чем y
, то условие if будет выполнено, и вы не вернете ничего, что является неопределенным поведением.
Следовательно, замените
else if(x+1<y){
с
else {
2.Вы не должны добавлять 1+max
в случае if(2*x < y)
, чтобы получить правильный результат, так как вы хотите считать только число +1
выполнено.
, следовательно, измените
int max=f(2*x, y);
return max+1;
К
int max=f(2*x, y);
return max;
После добавления весь ваш код становится.
int f(int x, int y){
if(x==y)
return 0;
if(x>y)
return -1;
if(2*x < y){
int max=f(2*x, y);
return max;
}
else {
int max=f(x+1,y);
return max+1;
}
}