我正在解决给定整数的问题,我们必须返回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.
答案 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中的步骤:
基本情况:任何小于10的数字都会返回0作为10的最大指数
递归任务:为n / 10找到的最大指数加1
一些代码:
public int powerofTen(int n){
if(n<10)
return 1;
else
return 10*powerofTen(n/10);
}