#//经过自己的分析,这个题只用考虑正数即可,同时刚开始时候考虑的是动规,但那样根本无法确定建立多大的数组存储。 //因此考虑递归,递归的思想为贪心。 //偶数的最小值一定是f(x/2)+1,但奇数不一定,因此要去f(x-1),f(x+1)的最小值。
int dfs(int x){
if(x<0) x=x*-1;
if(x<=2) return x;
if(x%2==0){
return dfs(x/2)+1; //奇数
}
else if(x%2){
return min(dfs(x-1),dfs(x+1))+1;
}
return 0;
}
int main() {
int x;
scanf("%d",&x);
printf("%d",dfs(x));
}