zoukankan      html  css  js  c++  java
  • 几次到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);  
    }
    
  • 相关阅读:
    ACM学习
    吴翼大神
    心急的C小加(两种解法)
    万圣节派对(水题)
    poj 1163 The Triangle
    POJ 1088滑雪
    1690 开关灯
    908. 校园网
    STL之stack栈
    1163 访问艺术馆
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2294015.html
Copyright © 2011-2022 走看看