微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如果有超过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

解决方法

我用递归解决了它

class WrongNumberOfPlayersError < StandardError ; end
class NoSuchStrategyError < StandardError ; end

def rps_game_winner(game)
  raise WrongNumberOfPlayersError unless game.length == 2
  if game[0][0].is_a?(Array) then
    winner1 = rps_game_winner(game[0])
    winner2 = rps_game_winner(game[1])
    game = [winner1,winner2]
  end
  raise NoSuchStrategyError unless /^(P|R|S){2}$/ =~ game[0][1] + game[1][1]
  case game[0][1]
    when "R"
      if game[1][1] == "P" then
        game[1]
      else
        game[0]
      end
    when "P"
      if game[1][1] == "S" then
        game[1]
      else 
        game[0]
      end
    when "S"
      if game[1][1] == "R" then
        game[1]
      else
        game[0]
      end
  end
end

def rps_tournament_winner(tournament)
  rps_game_winner(tournament)
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐