在Java中实现和修复递归方法

在Java中实现和修复递归方法,java,recursion,Java,Recursion,在我看来,当它到达“循环”的末尾(当start==nums.length)时发生的事情似乎有点不对劲,而当它不应该这样做时,它就会减去。但是,我不知道如何找出问题所在 (如果你们愿意,我会给出完整的代码)我希望它已经不相关了,你自己解决了,但如果不是在这里,我发现你的函数有什么问题。据我所知,只要检查给定范围内的所有可能组合,无论是否能达到目标数量。如果你真的不需要从GenerateProblem中返回任何东西(你可以,但你这样做只是增加了复杂性),你只需要检查所有的组合。这就是你可以做到的:

在我看来,当它到达“循环”的末尾(当start==nums.length)时发生的事情似乎有点不对劲,而当它不应该这样做时,它就会减去。但是,我不知道如何找出问题所在


(如果你们愿意,我会给出完整的代码)

我希望它已经不相关了,你自己解决了,但如果不是在这里,我发现你的函数有什么问题。据我所知,只要检查给定范围内的所有可能组合,无论是否能达到目标数量。如果你真的不需要从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;
        }
    }
}