c++ - “控制可能达到非空函数的结尾”和递归
问题描述
此函数接受两个数字,并递归地将其中一个数字增加特定数量,以查看它们是否最终匹配。(重点是检查两个棋子是否在同一对角线上)。
但是,会出现警告“控制可能到达非无效函数的结尾”,而有一个“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;
}
解决方案
试试这个:
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
这也使得在函数结束时更容易发现缺失;也许更重要的是,它使您的编译器更容易进行尾调用优化。
您应该始终假设您的编译器是正确的。
推荐阅读
- python - 使用 logit 比例的条形图给出错误:LogitScale 对象不可调用
- mysql - 为什么这个 MySql 组合唯一键不起作用?
- php - php数组替换到相同的深度
- solr - 在 SOLR 7.7 中禁用 master 中的复制会自动从 slave 中删除记录
- javascript - 为列表中的搜索项创建服务
- kentico - 具有继承的自定义页面类型属性
- python - 代码返回一个字典,如何获取这个数据?
- mysql - Nodejs 和 SQL - 使用多个选择语句将数据插入 SQL 的问题
- javafx - 在 JavaFX 线程与“普通”Java 线程中查询时,检索到的音频捕获设备名称不同
- java - 是否有适用于 Weblogic Server 11g 的 JDK 1.7.0.28?