private IEnumerable <GameState> CreateGameStates(TemporaryGameState temporaryGameState) { foreach (NavigateDirection navigateDirection in Enum.GetValues(typeof(NavigateDirection))) { if (temporaryGameState.CanNavigate(navigateDirection)) { temporaryGameState.Navigate(navigateDirection); foreach (var newGameState in CreateGameStates(temporaryGameState)) { yield return(newGameState); } temporaryGameState.NavigateBack(); } } if (temporaryGameState.IsWordExist()) { yield return(temporaryGameState.GetNewGameState()); } }