编程分配 - 递归

时间:2015-02-09 09:27:10

标签: java recursion

仍在学习,我似乎无法将头脑包裹在看似简单的任务上。 computeMethods方法是im totaly难倒的地方,但是反向的方法我只是不断反复获得相同的整数。

  /****************************
        * For Method Computemethods1 i must compute series
        * b(x)=1/3+2/5+3/7..... +x/2x+1
        * For method ComputeMethod2
        * 1/2+2/3+......... x/(x+1)
        *******************************/
      public static int computeMethod1(int x){
        if (x==0)
          return 0;
        if (x==1)
          return 1;
        return computeMethod1(x-1/3/(x-1))+computeMethod1(x-2/3/(x-2));
      }


      public static int computeMethod2(int x){
        if (x==0)
          return 0;
        return computeMethod2((x-1)/(x-1)+1)+computeMethod2((x-2)/(x-2)+1);
      }
      /********************
        * For method reverseMethod i must reverse a user given int
        **********************/
      public static int reverseMethod(int x){
        int reversedNum=0;
        if (x!=0)
          return x;
        reversedNum=reversedNum *10 +x%10;
        return reversedNum+reverseMethod(x/10);


      }
      /******************
        * For method sumDigits i must use recursion 
        * to sum up each individual number within the int
        ********************/

      public static long sumDigits(long n){
        if( n==0)
          return 0;
        if (n==1)
          return 1;
        else
          return n+sumDigits(n-1);
      }
    }

2 个答案:

答案 0 :(得分:2)

对于反向方法,您使用的是:if (x!=0) return x;

您可能需要使用:if (x==0) return x。所以逻辑是,如果给定的参数是0,则返回0,否则返回反转的数字。

PS:正如有人在comentaries中提到的那样,请注意类型,因此对于部门而言,您最好使用floatdouble,并处理正确结果的操作优先级,因此{{ 1}}将与(x+1)/2不同。

答案 1 :(得分:0)

对于您的每种方法,请按照小代码的代码进行操作。

例如,computeMethod1应返回:

    对于1/3
  • x == 1,而目前只返回1(注意,返回类型必须是int以外的其他内容。)

  • {li>

    1/3 + 2/5 x == 2

    {li>

    1/3 + 2/5 + 3/7 x == 3

对于每个x,请注意我们如何使用之前的结果,即computeMethod1(x - 1)

当您遇到似乎没有达到预期效果的代码时,请使代码更简单,更简单,直到您可以缩小问题范围,然后希望问题显而易见,或者在线文档可以告诉你。