java - 为什么这个函数会继续运行?
问题描述
我有这个练习,我需要编写一个 java 函数来确定是否可以仅对给定的一系列数字使用加法和减法来达到零。作为一个例子,让我们考虑这些数字 5,3,2,4,1,0,3 我可以使用加法和减法来达到零 5+3-2-4+1+0-3=0。另一个例子是 7+3-8+5-3-4-0 = 0 并且函数应该递归地工作。给出了一个解决方案,但我真的不明白它是如何工作的。
public static boolean addCalcExists(int[] values, int position, int result) {
if (position < values.length) {
boolean p = addCalcExists(values, position + 1, result + values[position]);
boolean n = addCalcExists(values, position + 1, result - values[position]);
return p || n;
}
return result == 0;
}
我已经在 Eclipse 中调试了代码,并首先为布尔值 p 逐步运行它,对于这些数字(5、3、2、4、1、0、3),系列加起来为 18,然后评估这个返回语句
return result == 0;
这显然返回 false 然后程序再次将 p 值分配给它 value false 然后评估 n 值这也是 false 然后程序评估此语句
return p || n;
它也返回 false 但随后又回到 p 值,这次位置值减一。为什么它不应该返回 false 并结束执行?
解决方案
推荐阅读
- javascript - 基于其他值的文本字段的可见性
- ios - 将 UICollectionView 与嵌套部分一起使用(堆叠标题)
- node-red - Noflo vs node-red vs totaljs
- windows - ORO-CRM Composer 安装 - 无法下载 composer/composer
- dynamics-crm - ssrs 中的 Lookup 和 lookupset 函数报告 mscrm
- drupal-8 - Porter Stemmer 模块不包含“milder”和“mild”词
- php - 如何在 Wordpress 中编辑没有插件的前端?
- angular - 禁用后无法重新启用材料自动完成面板
- javascript - 在javascript函数中转义单引号
- cryptocurrency - 如果我更改加密货币的创世块会发生什么