该函数仅需使用(1+)或(2 *)返回从x到y的最小通过次数。例如,从8到19,最小通过次数是“ 3” 因为(8 * 2 + 1 + 1 + 1 = 19),现在我的代码输出的是一个不同的数字而不是3,这是什么问题?
http.requiresChannel()
.antMatchers("/actuator/health").requires(ChannelDecisionManagerImpl.ANY_CHANNEL)
.anyRequest().requiresSecure();
答案 0 :(得分:2)
这里有两个问题。
1。当x
小于y
等于1时,不满足if条件,并且您不会返回任何未定义行为。
因此可以替换
else if(x+1<y){
with
else {
2。由于您只想统计完成的1+max
数,因此不应添加if(2*x < y)
来获得正确的结果。
更改
+1
致
int max=f(2*x, y);
return max+1;
添加完所有代码后,就变成了
。int max=f(2*x, y);
return max;
答案 1 :(得分:2)
在这种情况下,您应该在脑海中思考函数如何使用其变量。当它得到最后一次迭代时:
...
else if( x+1 < y ) {
int max = f( x+1, y );
return x+1;
}
...
基兰在这里是正确的。如前所述,在x = 8且y = 19的情况下,您会回想x = 18的函数,该函数将返回undefined,因为您的if都不匹配。
可能的解决方案可能是:
int f( int x, int y ) {
if( x < y ) {
if( x * 2 < y ) return f( x * 2, y );
else if( x + 1 <= y ) return 1 + f( x + 1, y );
} else if( x == y ) return 0;
else return -1;
}