【问题标题】:Can't print last digit of a number while displaying all digits of a number using recursion?使用递归显示数字的所有数字时无法打印数字的最后一位?
【发布时间】:2021-02-26 13:29:50
【问题描述】:

我试图使用递归打印数字的数字。我定义的函数返回所有数字,但我无法打印最后一个数字。任何人都可以指出代码中有什么问题吗?有没有比这更好的递归逻辑?

 public static int printIndividualDigits(int num){
        if((num/10) != 0){
           System.out.print(printIndividualDigits(num/10)+ ",");
        }
         if(num != 0){
           return num%10;
        }else{
             return 0;
         }
    }

【问题讨论】:

  • 代码有效......我认为downvote太苛刻......我只是好奇我是否可以改进代码。请告诉我关于否决票....
  • 当我运行您的代码时,我得到的输出 4,3,5,6,7,9 没有丢失任何最后一位数字。究竟是什么让您认为输出中缺少数字?
  • 如果您的代码有效并且没有错误,您应该知道您的问题不适合stackoverflow,而是属于codereview.stackexchange.com
  • 如果你用调试器一步一步地运行代码,应该很容易看出你的代码为什么不能工作,并找到解决方法。
  • 这里有个小提示:你的方法被命名为"printIndividualDigits"。真的需要返回int吗?

标签: java recursion


【解决方案1】:

那是因为您返回最后一个字符,但您打印所有其他字符。

在您的递归调用中,您不会将提醒附加到某个全局可用变量(在您的示例中这将是更可取的方式),因此您不会构建要打印的答案;相反,您只需打印每个递归调用的余数,然后(重要)return num%100

所以,您的第一个堆栈帧(这是初始方法调用,第一次进入递归方法)返回,而不是打印。

例如,如果您将使用号码3435,您的最后一个递归调用最终会是:

System.out.print(printIndividualDigits(34/10)+ ",");

它进入printIndividualDigits,参数3传递给“num”参数,然后方法打印3%10 => 3

现在,当您的递归调用从堆栈框架中弹出时 - 即您的递归返回到第一个递归框架(即第一个递归调用),变量 num 是 3435,*没有更多递归调用,代码执行将 System.out#print 方法调用传递给 if 检查,之后,它返回 0 或最新提醒,而不是打印它.

因此,在第一个堆栈帧中,您的return 3435%10,即5,只是被返回而不被打印。

【讨论】:

    【解决方案2】:

    把int改成双倍试试

    `
     public static double printIndividualDigits(double num){
            if((num/10) != 0){
               System.out.print(printIndividualDigits(num/10)+ ",");
            }
             if(num != 0){
               return num%10;
            }else{
                 return 0;
             }
        }
    
    `
    

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2023-02-18
      • 1970-01-01
      相关资源
      最近更新 更多