在Java中实现和修复递归方法
在我看来,当它到达“循环”的末尾(当start==nums.length)时发生的事情似乎有点不对劲,而当它不应该这样做时,它就会减去。但是,我不知道如何找出问题所在在Java中实现和修复递归方法,java,recursion,Java,Recursion,在我看来,当它到达“循环”的末尾(当start==nums.length)时发生的事情似乎有点不对劲,而当它不应该这样做时,它就会减去。但是,我不知道如何找出问题所在 (如果你们愿意,我会给出完整的代码)我希望它已经不相关了,你自己解决了,但如果不是在这里,我发现你的函数有什么问题。据我所知,只要检查给定范围内的所有可能组合,无论是否能达到目标数量。如果你真的不需要从GenerateProblem中返回任何东西(你可以,但你这样做只是增加了复杂性),你只需要检查所有的组合。这就是你可以做到的:
(如果你们愿意,我会给出完整的代码)我希望它已经不相关了,你自己解决了,但如果不是在这里,我发现你的函数有什么问题。据我所知,只要检查给定范围内的所有可能组合,无论是否能达到目标数量。如果你真的不需要从GenerateProblem中返回任何东西(你可以,但你这样做只是增加了复杂性),你只需要检查所有的组合。这就是你可以做到的:
2 2 3 12
2 -2 3 12
2 -2 -1 12
2 -2 -1 8
2 -2 -1 9
2 -2 -1 10
A few more lines later is where it messes up...
2 1 1 12
2 1 1 13
2 1 2 10
2 1 2 6
2 1 2 7
2 1 3 7
....Few hundred more combinations later...
9 -1 -23 -46
9 -1 -23 -45
9 -1 -23 -44
9 -1 -23 -43
....And now I'm sad :(
public void generateProblems(整数[]nums,int start)
{
如果(开始!=nums.length)
{
for(int i=-range;i
在
操作(nums)内部代码>执行您的逻辑每次尝试打印中间值和/或条件值,以便您可以了解程序为何做出意外决定。这应该向您展示逻辑中的错误。然后你所需要做的就是弄清楚它在那一点上应该做什么。非常感谢!这就像检查所有可能性的符咒。然而,我现在在我的解决方案列表中遇到了一个非常奇怪的问题。尽管准确地确定了正确的值,但当我将它添加到列表中时,它只会列出原始的num。例如,种子{5,4,3,8}将只打印出{5,4,3,8}作为解决方案,即使当我打印出它添加到列表中的字符串时,它也会打印出正确的数字!
2 2 3 12
2 -2 3 12
2 -2 -1 12
2 -2 -1 8
2 -2 -1 9
2 -2 -1 10
A few more lines later is where it messes up...
2 1 1 12
2 1 1 13
2 1 2 10
2 1 2 6
2 1 2 7
2 1 3 7
....Few hundred more combinations later...
9 -1 -23 -46
9 -1 -23 -45
9 -1 -23 -44
9 -1 -23 -43
....And now I'm sad :(
public void generateProblems(Integer[] nums, int start)
{
if (start != nums.length)
{
for (int i = -range; i < range; i++)
{
nums[start] = nums[start] + i;
action(nums);
generateProblems(nums, start + 1);
nums[start] = nums[start] - i;
}
}
}