首页 > 解决方案 > “控制可能达到非空函数的结尾”和递归

问题描述

此函数接受两个数字,并递归地将其中一个数字增加特定数量,以查看它们是否最终匹配。(重点是检查两个棋子是否在同一对角线上)。

但是,会出现警告“控制可能到达非无效函数的结尾”,而有一个“else”语句总是返回一些东西。

bool pursue_recursive_increasing(int searcher, int target, int increment)
{
if (searcher==target)
    return true;
else if (searcher<target)
    pursue_recursive_increasing(searcher+increment, target, increment);
else
    return false;
}

标签: c++

解决方案


试试这个:

bool pursue_recursive_increasing(int searcher, int target, int increment)
{
    if (searcher==target)
        return true;

    if (searcher>=target) // or, !(searcher < target)
        return false;

    return pursue_recursive_increasing(searcher+increment, target, increment);
}

请注意,我调整了您的逻辑,以便递归调用是最后一个,简单的锚条件是第一个;有些人可能会觉得这更容易理解。return这也使得在函数结束时更容易发现缺失;也许更重要的是,它使您的编译器更容易进行尾调用优化

您应该始终假设您的编译器是正确的。


推荐阅读