几次到1(分治递归)

     输入一个正整数,处理它:如果是偶数就除以2,如果是奇数就加1或减1,一直处理下去,直到结果为1停止,最少需要操作几次?(要求用递归)

     我的代码可能有bug,还望高手指点!如果谁有更好的解法也请赐教啊!

代码:

#include<stdio.h>
#include<stdlib.h>

int fun(int n);
int min(int a,int b);

int main()
{
  int n;
   
   while(scanf("%d",&n) != EOF )
      printf("%d\n",fun(n));                     
      
  //system("pause");
  return 0;    
}
int min(int a,int b)
{
    return a<b? a:b;
}
int fun(int n)
{
   if(n == 1) return 0;
   if(n & 1)
      return 2 + min( fun( (n+1)/2 ),fun( (n-1)/2 ));
   else   
      return 1 + fun(n/2);  
}
原文地址:https://www.cnblogs.com/HpuAcmer/p/2294015.html