为什么递归不更改值?

问题描述 投票:0回答:1

如果输入:int [] nums = [1,2,3]target = 4;为什么输出res = 0; res尚未累积?

    public int combinationSum4(int[] nums, int target) {
        int res=0;
        helper(nums,target,res);
        return res;
    }

    private void helper(int[] nums, int target, int res){
        if (target==0) {
            res++;
            return;
        }
        else if (target<0) return;
        else {
            for(int i=0;i<nums.length;i++){
                helper(nums, target-nums[i],res);
            }
        }

    }
java recursion methods void
1个回答
0
投票

Java原语不是通过引用传递的,而是通过值传递的。这意味着,如果将int传递给方法并在该方法内部对其进行递增,则该值仅在该方法的范围内增加,而不在该范围之外。

因此res++仅在helper方法内更改res。如果您想让它在它外面做任何事情,则需要返回它的值并在外面分配它

© www.soinside.com 2019 - 2024. All rights reserved.