Nice work! We’re halfway through writing our minimax() function — it’s time to make the recursive call.

We have our variable called best_value . We’ve made a hypothetical board where we’ve made one of our potential moves. We now want to know whether the value of that board is better than our current best_value.

In order to find the value of the hypothetical board, we’ll call minimax(). But this time our parameters are different! The first parameter isn’t the starting board. Instead, it’s new_board, the hypothetical board that we just made.

The second parameter is dependent on whether we’re the maximizing or minimizing player. If is_maximizing is True, then the new parameter should be false False. If is_maximizing is False, then we should give the recursive call True.

It’s like we’re taking the new board, passing it to the other player, and asking “what would the value of this board be if we gave it to you?”

To give the recursive call the opposite of is_maximizing, we can give it not is_maximizing.

That call to minimax() will return the value of the hypothetical board. We can then compare the value to our best_value. If the value of the hypothetical board was better than best_value, then we should make that value the new best_value.



Let’s make that recursive call!

Inside the for loop after calling select_space(), create a variable named hypothetical_value and set it equal to minimax() using the parameters new_board and not is_maximizing.

To help us check if you did this correctly, return hypothetical_value instead of best_value. We’ll change that return statement soon!


Now that we have hypothetical_value we want to see if it is better than best_value.

Inside the for loop, write another set of if/else statements checking to see if is_maximizing is True or False

If is_maximizing is True, then best_value should become the value of hypothetical_value if hypothetical_value is greater than best_value.

If is_maximizing is False, then best_value should become the value of hypothetical_value if hypothetical_value is less than best_value.

Switch your return statements back to returning best_value.


Wow! Great work, our minimax function is done. We’ve set up a couple of boards for you. Call minimax() three different times on the boards x_winning, and o_winning. In each of those boards, it’s "X"‘s turn, so set is_maximizing to True.

Print the results of each. What does it mean if the result is a -1, 0 or 1?

You can also try running minimax() on new_game. This might take a few seconds — the algorithm needs to traverse the entire game tree to reach the leaves!

Take this course for free

Mini Info Outline Icon
By signing up for Codecademy, you agree to Codecademy's Terms of Service & Privacy Policy.

Or sign up using:

Already have an account?