【发布时间】:2018-01-10 11:12:16
【问题描述】:
在下面的代码中,我的初衷是将计数器变量传递给递归运行的辅助方法,并在此过程中对其进行更新,然后在辅助函数运行完成时将其返回。
计数器返回零,我试图弄清楚为什么会这样。我知道这种方法在你传入一个数组时有效,我相信这是因为对数组的每个引用都指向内存中的同一个对象,例如,当你使用铲子运算符时,你正在改变那个对象。
然而,在这种情况下,情况并非如此,计数器变量被重新分配给内存中的一个新值(无论结果整数指向的位置)。
这是我的问题 --> 这里的问题是计数器变量被正确地重新分配,但只在它定义的范围内?所以 return 'counter +=1' 不会保留对 counter 变量的更改,因为在该函数的范围内(并且仅在函数的范围内)counter 变量被重新分配?很难彻底理解这一点。以下是感兴趣的人的问题陈述:
给定一个包含所有正数且没有重复的整数数组,找出加起来为正整数目标的可能组合数。
Example:
nums = [1, 2, 3]
target = 4
The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
Note that different sequences are counted as different combinations.
Therefore the output is 7.
这是我的代码:
# @param {Integer[]} nums
# @param {Integer} target
# @return {Integer}
def combination_sum4(nums, target)
nums.sort! # n log n
generate_combinations(nums, target, counter = 0)
counter
end
def generate_combinations(nums, target, counter)
return counter += 1 if target == 0
(1...nums.length).each do |num|
break if num > target
generate_combinations(nums, target - num, counter)
end
counter
end
【问题讨论】:
标签: ruby pass-by-reference pass-by-value