【问题标题】:Why the value not changed in recursion? [duplicate]为什么递归中的值没有改变? [复制]
【发布时间】:2023-03-23 19:47:02
【问题描述】:

如果输入: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】:

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

    所以res++ 只更改了辅助方法中的 res。如果你想让它在它之外做任何事情,你需要返回它的值并将它分配到外面

    【讨论】:

    • 谢谢,因为我看到一段用C++写的代码,和我的代码差不多。所以我想知道 C++ 原语是否是按值传递的? (或者 C++ 中有什么东西,比如“&”,很重要吗?)
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多