为什么在此递归函数中输出错误?

时间:2018-10-06 20:18:46

标签: c function recursion

该函数仅需使用(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();

2 个答案:

答案 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;

}