return语句在执行方法期间给出了意外的结果,以查找十的幂

时间:2017-09-09 13:19:55

标签: java recursion

我正在解决给定整数的问题,我们必须返回10的最大幂,它小于或等于给定int n的值。 我试图解决它,但运行时间并不像预期的那样。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
       Options -MultiViews
   </IfModule>
   Options +FollowSymlinks
   RewriteEngine On

   # Redirect Trailing Slashes...
   RewriteRule ^(.*)/$ /$1 [L,R=301]

   # Handle Front Controller...
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^ index.php [L]
</IfModule>

如果我用 public int powerofTen(int n){ int x; if(n>0){ x = 1 + powerofTen(n/10); }else{ return 0; } return x; } 替换最后return x语句以获得正确答案,则显示的值为0。 此外,如果我尝试使用return (int)Math.pow(10,x-1)代替return x-1,则显示为0。

清关输出: 如果n = 100

int x值为3。

带有return x值的

为0.

带有return x-1

值为0.

2 个答案:

答案 0 :(得分:1)

这根本不与递归有关,错误不在递归代码中。问题是你需要你的函数返回,例如:

对于输入100,数字3可能返回return x。如果将(int)Math.pow(10,x-1)替换为return x-1,则递归调用将导致错误的结果。例如,您将使用输入100调用该函数,该函数将使用输入10调用该函数,依此类推,但您希望函数调用输入10返回外部调用值1.如果放置{{1} }(或(int)Math.pow(10,x-1))而不是返回x然后在输入10的递归中取结果0而不是1,因此输入100也会得到0。

错误是合乎逻辑的,为了解决问题,你需要找到指数,例如输入100数字3,然后返回(函数外部)(int)Math.pow(10,x-1)

答案 1 :(得分:1)

即使它已被回复,但这样更容易看到递归algortihms中的步骤:

  1. 基本情况:任何小于10的数字都会返回0作为10的最大指数

  2. 递归任务:为n / 10找到的最大指数加1

  3. 一些代码:

    public int powerofTen(int n){
        if(n<10)
            return 1;
        else
            return 10*powerofTen(n/10);
    }