gpt4 book ai didi

java - 为什么我在 Ruby 中使用递归时得不到正确答案?

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:55 26 4
gpt4 key购买 nike

我用 Java 创建了一个代码片段,如下所示。这是从 nCr 获取所有组合的代码。

code using recursion with Java , 在线编译器

Java 版本

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.HashSet;

public class prog {

public static void main(String[] args) {

// nCr : n=[1,2,3,4,5],r=3
ArrayList<Integer> n = new ArrayList<>(Arrays.asList(1,2,3,4,5));
getCombination(n,3);
}

private static Set<ArrayList<Integer>> getCombination(ArrayList<Integer> n, Integer r) {
Set<ArrayList<Integer>> ans = new HashSet<ArrayList<Integer>>();
combination(n, r, ans);
for (ArrayList<Integer> e : ans) {
System.out.println(e.toString());
}
return ans;
}

private static void combination(ArrayList<Integer> n, Integer r, Set<ArrayList<Integer>> ans) {
if (n.size() == r) {
ans.add(n);
return;
}
for (int i = 0; i < n.size(); i++) {
ArrayList<Integer> N = new ArrayList<Integer>();
N.addAll(n);
N.remove(i);
combination(N,r,ans);
}
}
}

接下来,我尝试用 Ruby 移植它。但是,它不能很好地工作。
你能指出两个代码片段之间的问题是什么吗?

code using recursion with Ruby , 在线编译器

ruby 版本

require 'set'

def combi(n, r, ans)
if n.size == r
ans.add(n)
return
end
for i in 0..n.size
arr = n.dup
arr.delete_at(i)
combi(arr, r, ans)
end
end

def get_combination(n, r)
ans = Set.new
combi(n, r, ans)
#ans.map do |e|
# puts e.to_s
#end
ans
end

n1 = [1,2,3,4,5]
get_combination(n1, 3)

我知道 ruby​​ 有 combination 方法,但这不是问题。

最佳答案

这部分:

for i in 0..n.size
arr = n.dup
arr.delete_at(i)
combi(arr, r, ans)
end

在你的 ruby​​ cody 中,你达到了 n.size 。这必须专门用'...'制作代码

for i in 0...n.size
arr = n.dup
arr.delete_at(i)
combi(arr, r, ans)
end

那么你的代码就可以正常工作了!

关于java - 为什么我在 Ruby 中使用递归时得不到正确答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com