加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:46:12 所属栏目:百科 来源:网络整理
导读:如果有超过8的话,我试图拆分子阵列.我已经尝试在玩家身上调用rps_tournament_winner函数,如果它的扁平长度大于16但是我得到了“堆栈太深的错误”. 我是否必须参与球员变量或锦标赛?我正朝着正确的方向努力;不完整的解决方案. def rps_tournament_winner(tou
如果有超过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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读