返回数字的递归方法,帮助为0

时间:2014-11-19 19:52:58

标签: java recursion

所以我正在做这个练习,我的老师说他想要这行中的num / 10:System.out.print(numDigits(num/10));在方法中(这样如果原始数字为0那么它将返回1位而不是0),但我不知道他想要的地方。

(*必须通过递归来计算数字的位数)

对我而言,这种方式很简单,但我想如果您编写了大量代码,则不想继续输入x / 10.

import java.util.*;

public class NumDigits
{
  public static void main(String[]args)
  {
    int num;

    Scanner input = new Scanner(System.in);
    num = input.nextInt();
    input.close();

    System.out.print(numDigits(num/10));
  }

  public static int numDigits(int x)
  {  
    if (x == 0)
    {return 1;}
    else
    {
      return 1 + numDigits(x/10);
    }
  }
}

我想我可以做到这一点,但需要更多代码...:/

import java.util.*;

public class NumDigits
{
  public static void main(String[]args)
  {
    int num;

    Scanner input = new Scanner(System.in);
    num = input.nextInt();
    input.close();

    System.out.print(numDigits(num, num));
  }

  public static int numDigits(int x, int num)
  {  
    if (num == 0)
    {return 1;}
    else if (x == 0)
    {return 0;}
    else
    {
      return 1 + numDigits(x/10, num);
    }
  }
}

5 个答案:

答案 0 :(得分:1)

嗯,第一次分裂很容易被删除。

public class NumDigits
{
  public static void main(String[]args)
  {
    int num;

    Scanner input = new Scanner(System.in);
    num = input.nextInt();
    input.close();

    System.out.print(numDigits(num));
  }

现在你的支票0仍然可以在numDigits功能中使用,甚至可以用于第一个' 0'同样。现在你需要调整的只是递归调用本身,留作练习,因为它仍然是作业。

答案 1 :(得分:1)

我假设numDigits返回数字中的小数位数

这是一个简单的解决方案:

public static int numDigits(int x) {
    return Integer.toString(x).length();
}

担心locales / radix / speed / negatives?试试这个:

public static int numDigits(int x) {
    if (x == 0) {
        return 1;
    } else {
        return (int) (Math.log10(Math.abs(x))) + 1;
    }
}

但是,如果需要递归:

public static int numDigits(int x) {
    if (x > -10 && x < 10) {
        return 1;
    } else {
        return numDigits(x / 10) + 1;
    }
}

答案 2 :(得分:1)

使用递归方法可以通过这种方式实现SuperDigit

public class SuperDigit
{
 //static int sum = 0;

public static void main(String[] args)
{
int n = 8596854;



System.out.println(sum(n));
}
static int sum (int num)
{
if (num != 0)
{
    return (num % 10 + sum (num / 10));
}
else
{
   return 0;
}
}
}

答案 3 :(得分:0)

为什么不这样做:

import java.util.*;

public class NumDigits
{
public static void main(String[]args)
{
int num;

Scanner input = new Scanner(System.in);
num = input.nextInt();
input.close();

System.out.print(numDigits(num));
}

public static int numDigits(int num)
{  
if ((num/10) == 0)
{return 1;}
else
{
  return 1 + numDigits(num/10);
}
}
}
这样&#34; num / 10&#34;在递归方法中不是主要方法,零问题得到解决。

答案 4 :(得分:0)

我是个白痴。答案是:

import java.util.*;

public class NumDigits
{
  public static void main(String[]args)
  {
    long num;

    Scanner input = new Scanner(System.in);
    num = input.nextInt();
    input.close();

    System.out.print(numDigits(num));
  }

  public static long numDigits(long x)
  {  
    if (x/10 == 0)
    {return 1;}
    else
    {
      return 1 + numDigits(x/10);
    }
  }
}

我认为它不会起作用所以我没有尝试过