Java中如何从递归中取出变量?
这是Java中的一个方法,在int[]arr中(当k==0时)有一个k组合int[]intem。在变量中,iloczyn是该组合中元素的计算乘积。在tmp中,计算所有此类产品的总和。不幸的是,System.out.println(tmp)显示,当函数结束时,tmp等于0。这是非常悲哀的,因为我需要这个变量来进行下一次计算。我该怎么办Java中如何从递归中取出变量?,java,recurrence,Java,Recurrence,这是Java中的一个方法,在int[]arr中(当k==0时)有一个k组合int[]intem。在变量中,iloczyn是该组合中元素的计算乘积。在tmp中,计算所有此类产品的总和。不幸的是,System.out.println(tmp)显示,当函数结束时,tmp等于0。这是非常悲哀的,因为我需要这个变量来进行下一次计算。我该怎么办 int tmp = 0; public void kcomb(int[] items, int n, int k, int[] arr) { int il
int tmp = 0;
public void kcomb(int[] items, int n, int k, int[] arr)
{
int iloczyn = 1;
if (k == 0) {
for(int i = 0; i< arr.length; i++){
iloczyn*=arr[i];
}
tmp +=iloczyn;
} else {
for (int i = n; i <= items.length - k; i++) {
arr[arr.length - k] = items[i];
kcomb(items, i + 1, k - 1, arr);
}
}
System.out.println(tmp);
}
inttmp=0;
公共无效kcomb(int[]项,int n,int k,int[]arr)
{
int-iloczyn=1;
如果(k==0){
对于(int i=0;i 对于(int i=n;i除非我遗漏了什么,否则你只能在k==0时设置tmp。k不改变,所以在调用方法时它必须是非零的。除非我遗漏了什么,否则你只能在k==0.k不改变时设置tmp,所以在调用方法时它必须是非零的。递归方法可能很棘手。你会因为你没有很好地处理方法的返回值。事实上,根本没有
首先,按照@olicharlesworth的建议去做,并通过代码进行调试。这会很有启发性
然后,为了解决这个问题,考虑到你的例程基本上有2个不满足的片段——k==0个片段,另一个部分应该初始化TMP值,计算适合该部分的TMP值并将其返回给调用方。
那么有问题的实例tmp变量就不会有问题了。递归方法可能很棘手。你会被烧坏,因为你没有很好地处理方法的返回值。事实上,根本没有
首先,按照@olicharlesworth的建议去做,并通过代码进行调试。这会很有启发性
然后,为了解决这个问题,考虑到你的例程基本上有2个不满足的片段——k==0个片段,另一个部分应该初始化TMP值,计算适合该部分的TMP值并将其返回给调用方。
那么有问题的实例tmp变量将不会出现问题。arr[]中的任何值是否等于零?如果为真,则此块:
for(int i = 0; i< arr.length; i++){
iloczyn*=arr[i];
}
for(int i=0;i
…将始终生成一个零。如果第一个值为零,则iloczyn*0=0,所有后续迭代也将等于零。如果数组中的任何值为零,则会发生相同的情况…它们将强制iloczyn每次都设置为零
单步执行代码并仔细检查arr[]的值,以确保。arr[]中的任何值是否等于零?如果为真,则此块:
for(int i = 0; i< arr.length; i++){
iloczyn*=arr[i];
}
for(int i=0;i
…将始终生成一个零。如果第一个值为零,则iloczyn*0=0,所有后续迭代也将等于零。如果数组中的任何值为零,则会发生相同的情况…它们将强制iloczyn每次都设置为零
一步一步地检查代码并仔细检查arr[]的值,以确保其正确性。好吧,该方法并不总是打印0--I,对于输入{1,3,5,7},3,1,{4,3,2,1}
它打印168(两次)。当然,我不知道这些输入是否有任何意义
您应该仔细考虑逻辑,看看代码是否真的在做您认为应该做的事情。@TonyEnnis是对的,使用返回值而不是副作用将使这一点更好(无论是理解还是编码实践)。好吧,该方法并不总是打印0--I和输入{1,3,5,7},3,1,{4,3,2,1}
它打印168(两次)。当然,我不知道这些输入是否有任何意义
您应该仔细考虑逻辑,看看代码是否真的在做您认为应该做的事情。@TonyEnnis是对的,使用返回值而不是副作用会使这更好(理解和编码实践方面).使用调试器找出代码在做什么?要更快地获得更好的帮助,请尝试发布一个使用调试器找出代码在做什么?要更快地获得更好的帮助,请尝试发布一个k
是否“更改”--其中有一个递归调用。k
是否“更改”--其中有一个递归调用。