首页 > 解决方案 > 将具有默认值的小型 JavaScript 函数移植到 Java

问题描述

我正在创建一个有趣的小计算器程序,您可以在其中给出一个总和和一组其他数字,并查看可以将这些数字相加以获得该总和的所有方法。

例如,如果我想看看如何得到12数字的总和,2,4,6,8,10我希望输出看起来像这样:

[[2,2,2,2,2,2],[2,2,2,2,4],[2,2,2,4,2],[2,2,2,6],[ 2,2,4,2,2],[2,2,4,4],[2,2,6,2],[2,2,8],[2,4,2,2,2] ,[2,4,2,4],[2,4,4,2],[2,4,6],[2,6,2,2],[2,6,4],[2, 8,2],[2,10],[4,2,2,2,2],[4,2,2,4],[4,2,4,2],[4,2,6] ,[4,4,2,2],[4,4,4],[4,6,2],[4,8],[6,2,2,2],[6,2,4] ,[6,4,2],[6,6],[8,2,2],[8,4],[10,2]]

我过去使用此递归函数使用 javascript 完成了此操作:

function f(A, N, r=[], s=N){
  if (s == 0){
    return [r];
  }

  result = [];

  for (let a of A){
    if (a <= s){
      result = result.concat(f(A, N, r.slice().concat(a), s-a));
    }
  }
  return result;
}

您可以使用以下方式调用它:

f([2,4,6,8,10], 12))

这是它的 JsFiddle: https ://jsfiddle.net/6u1v79Lb/1/

我现在正在尝试将此逻辑移植到 java 代码中,但没有成功。我对 Java 的了解并不是最丰富的,但我尝试过使用重载方法使用不同的方法,但未能接近。

这不是工作代码,但我的逻辑是:

 public static String f(int[] a, int n, String r, int s) {
        if(s == 0) {
             return r;

        }
    
    ArrayList<String> result = new ArrayList<String>();
    
    for(int a_item : a) {
        if(a_item <= s) {
            //super confused what to do here
            Collections.addAll(result, f(a,n,r, s-a_item));
          }
    }
    
    return result.toString();
    
}

标签: java

解决方案


推荐阅读