当前位置: 首页 > 知识库问答 >
问题:

如何在java中编写一个接收正整数或负整数并返回其位数的递归方法

步兴为
2023-03-14

我试图解决这个问题:编写一个递归方法,返回作为int类型参数传递给它的整数中的位数。允许使用正参数和负参数。例如,-120有三个数字。

这是我的代码,但当我试图通过121时,我总是得到1:

public static int recursion(int inNumber){
    //create a counter variable for the total of digits
    int totalDigits = 0;
    //base case
    if (inNumber < -10 || inNumber > 10){
        totalDigits++;
        return totalDigits;
        //recursive case
    }else{
        totalDigits++;
        return recursion(inNumber/10) + totalDigits;
    }
}

共有3个答案

郝池暝
2023-03-14

如果你拿121,

int totalDigits = 0;
if (121< -10 || 121> 10){ // YES 121>10 then: 
    totalDigits++;
    return totalDigits;

逻辑检查它是否高于10,并返回totalDigits(1)。你想做的恰恰相反。如果大于10,则调用相同的函数。基本上你的if/else正好相反。

琴宾鸿
2023-03-14

下面是我如何修复这个代码的:

1:通过使用逻辑否定来解决逻辑错误,并使代码更具描述性。

public static int recursion(int inNumber) {
    //create a counter variable for the total of digits
    int totalDigits = 0;
    //base case
    if (!(inNumber <= -10 || inNumber >= 10)) { //notice the !
        return totalDigits + 1;
    //recursive case
    } else {
        totalDigits++;
        return recursion(inNumber / 10) + totalDigits;
    }
}

优化1:你也可以摆脱局部变量总计数字,因为它总是1

public static int recursion(int inNumber) {
    //base case
    if (!(inNumber <= -10 || inNumber >= 10)) {
        return 1;
    //recursive case
    } else {
        return recursion(inNumber / 10) + 1;
    }
}

优化2:你可以使用Math实现同样的效果。abs(int)

public static int recursion(int inNumber){
    if (Math.abs(inNumber) < 10) {           //base case
        return 1;
    } else {                                 //recursive case
       return recursion(inNumber / 10) + 1;
    }
 }
谷梁弘深
2023-03-14

Math试试这个简化的代码。abs

public static void main(String[] args) {
     System.out.println(recursion(123456, 0));
}   

public static int recursion(int inNumber, int totalDigits){

    totalDigits++;
    if (Math.abs(inNumber) < 10){
        return totalDigits;
    }else{
        return recursion(inNumber/10, totalDigits);
    }
 }

输出

6个

 类似资料:
  • 例如int[]arr={1,2,2,3,4,5};3只存在一次,方法应该返回true;2存在两次,方法应该返回false;0不存在,方法应该返回false。我不断得到一个运行时错误,我如何修复它,或者有没有任何方法到方法(仅递归)。下面是我的代码:

  • 我被要求编写一个函数,如果正整数中有偶数个 0 位数字,则返回 True,否则返回 False(使用递归)。作为尝试,我编写了一个函数来计算整数中的 0 数。我可以知道如何修改程序以使其返回真和假吗?

  • 在这个代码中,-20应该是最小值,因为它是负数,并且离零最远,正确吗?但当我运行MinAlgoritm时,会打印出整数5。我有一个最大版本的这个可以很好地工作,但这个不行。这怎么可能?我能做些什么改进吗?

  • 家庭作业:寻找更好的策略或方法,而不是完整的代码。 当我试图确定这个问题的递归情况时,我完全被弄糊涂了。我必须编写一个接受整数参数“n”的方法,然后输出总共“n”个字符。根据原始整数是奇数还是偶数,中间字符应始终为“”或“*”。下面是两个不同的方法调用和输出应该是什么样子: 我该如何识别递归案例呢?

  • 我被指派编写这段代码,起初看起来很简单。我把它写了出来,尽我所能去理解它,我真的认为我把它记下来了。但当我尝试使用VisualStudio检查代码时,出现了代码错误,代码将无法完成处理。 作业如下: 编写一个名为specialNumbers的函数,该函数计算并返回两个可被3整除的目标数之间的整数总数。该函数采用两个参数:1。开始,一个整数2。end,大于start的整数函数返回起始和结束之间3的倍

  • 我需要使用这个方法: 然后使用递归计算存储在数组中的最大数、负数的计数以及正数的和。因此,您将在Assignment9类中创建递归方法findMax、countNegative和ComputeSum积极,它们将由main方法调用。 具体来说,必须实现以下递归方法(这些方法不应包含任何循环): 在数组中 如果我能算出这个负的,我就能算出计算的正的。 计数可以是你需要的任何东西。我把它更多地用作Fin