使用递归的javascript步骤

使用递归的javascript步骤,javascript,recursion,Javascript,Recursion,我的问题与中的相同,但唯一的区别是,我必须返回根据给定的允许步数数组可以爬升的步数。例如,如果要爬升的台阶是4,允许的台阶是[1,3],则结果应该是3。组合:[(1,1,1,1)、(1,3)、(3,1)] 我尝试将代码修改为: function add(x,arr){ let result = 0 if(x<0) return 0; if(x===0) return 1; else{for(let i=0 ; i<arr.length ;

我的问题与中的相同,但唯一的区别是,我必须返回根据给定的允许步数数组可以爬升的步数。例如,如果要爬升的台阶是
4
,允许的台阶是
[1,3]
,则结果应该是
3
。组合:
[(1,1,1,1)、(1,3)、(3,1)]

我尝试将代码修改为:

function add(x,arr){
let result = 0
   if(x<0)
      return 0;

   if(x===0)
      return 1;

   else{for(let i=0 ; i<arr.length ; i++){
        result += add(x-arr[i]);
      }
      return result};  
}
add(4,[1,3])
功能添加(x,arr){
设结果=0

如果(x处于您的else状态

result += add(x-arr[i])
应该是

result += add(x-arr[i], arr)

在你的情况下

result += add(x-arr[i])
应该是

result += add(x-arr[i], arr)

起初我误读了这个问题,很高兴向大家展示了如何将一个计算结果的递归函数转换为一个列出结果的递归函数。当我来到这里发布它时,我意识到这并不是所问的问题,但我仍然发现这是一个很好的例子,说明了人们可能会如何做……所以我还是发布了它。:-)

一个简单的计数解决方案,类似于问题中的解决方案(由Abbas Cycleewala修复),可以这样构造:

const count=(n,ss)=>
n<0?
0
:n==0?
1.
://其他
map(s=>count(n-s,ss))
.减少((a,b)=>a+b,0)
控制台日志(
计数(4,[1,3])/~>3

)
一开始我误读了这个问题,很高兴向大家展示了如何将计算结果的递归函数转换为列出结果的递归函数。当我来到这里发布它时,我意识到这不是问题所在,但我仍然发现这是一个很好的示例,说明了如何处理这个问题……所以我还是发布了它。:-)

一个简单的计数解决方案,类似于问题中的解决方案(由Abbas Cycleewala修复),可以这样构造:

const count=(n,ss)=>
n<0?
0
:n==0?
1.
://其他
map(s=>count(n-s,ss))
.减少((a,b)=>a+b,0)
控制台日志(
计数(4,[1,3])/~>3

)
add(x,arr)
你怎么称呼
add(x,arr)
?消息会清楚地表明
arr
未定义的
add(x-arr[i]);
对不起,我没有包括在内。这是在呼叫add之后说的。你怎么称呼
add(x,arr)
?消息会清楚地表明
arr
未定义的
add(x-arr[i]);
很抱歉,我没有包括这一点。这是调用add后所说的。