在多维嵌套数组上调用递归函数的问题

The*_*Kid 3 ruby recursion saas multidimensional-array

如果有超过8的话,我试图拆分子阵列.我已经尝试在玩家身上调用rps_tournament_winner函数,如果它的扁平长度大于16但是我得到"堆栈太深的错误".

我是否必须参与球员变量或锦标赛?我正朝着正确的方向努力; 不完整的解决方案.

def rps_tournament_winner(tournament)
  return rps_game_winner(tournament) if tournament.flatten.length == 4
  players = tournament.flatten(2)  

  while players.length > 1
    players = players.each_slice(2).map { |x| rps_game_winner(x) }
  end

  players[0]
end
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 6

这是我能够提出的最短的(递归)

def rps_tournament_winner(games)
   if games.flatten.length > 4
     rps_game_winner([rps_tournament_winner(games[0]), rps_tournament_winner(games[1])])
   else
     rps_game_winner(games)
   end
end
Run Code Online (Sandbox Code Playgroud)


小智 5

这也是一个优雅的解决方案,无需扁平化阵列:

def rps_tournament_winner(tournament)
    if tournament[0][0].is_a?(Array)
        tournament =[rps_tournament_winner(tournament[0]), rps_tournament_winner(tournament[1])]
    end
    rps_game_winner(tournament)
end
Run Code Online (Sandbox Code Playgroud)