Oct-10-2020, 05:44 AM
(This post was last modified: Oct-10-2020, 05:47 AM by deanhystad.)
multiples_of_two = list(range(2, max_value, 2)) or multiples_of_two = [x for x in range(2, max_value, 2)]These are not the kind of problems where I would use recursion.
This is a recursive function that solves a Sudoku puzzle.
def solve(puzzle): for r in range(9): for c in range(9): ## If cell is open if puzzle[r][c] == 0: ## Try available numbers choices = puzzle.available(r, c) for value in choices: puzzle[r][c] = value if solve(puzzle): ## Puzzle is solved! return True ## No solution. Unwind recursion puzzle[r][c] = 0 return False return TrueIt is a very simple approach to solving the puzzle. Find an open cell. Fill the cell with number that does not appear in the same row, column or square (3x3 group of cells). Find the next open cell and repeat until all cells are filled, or you find an open cell with no available numbers. If you find an open cell with no available numbers, clear the cell, go back to the previous cell and try the next available number.
Though simple, this algorithm is difficult to implement without recursion. The main thing the program does is maintain a list of partial solutions. This is easy to do using recursion because the Python saves the information automatically. To "flatten" this algorithm I would have to save the boards and the cell and the numbers I have tried in some sort of data structure, and I would have to write code to add a board to the structure and remove a board and my program is going to be a lot longer than 12 lines.
I avoid using recursion. There is no problem you can solve using recursion that cannot be solved without using recursion, and the non-recursive solutions are generally faster. There are often limits on recursion. My Sudoku solver does not bump into these limits, but anyone using a "multiples_of_two" program that used recursion would crash the program if they wanted a list of even numbers from 2 to 5000.