11566:Moliu Number Generator

問題文
http://uva.onlinejudge.org/external/115/11567.html

整数nが与えらるれので以下の3つの操作をして
0をnにする最小手数を求めよ。

1を足す
1を引く
2を掛ける


















3つの操作でnを0にする最小手数を再帰関数で数えた。
奇数なら-1と+1をどちらも試して、偶数なら2で割るのを繰り返した。

#include<iostream>
#include<algorithm>
 
using namespace std;
typedef long long ll;
 
ll rec(ll n){
  if(n<4)return n;
  if(n%2==0)return rec(n/2)+1;
  return min(rec(n-1),rec(n+1))+1;
}
 
int main(void){
  ll n;
  while(cin >> n)cout << rec(n) << endl;
  return 0;
}