Jan-31-2021, 09:13 AM
(Jan-31-2021, 05:09 AM)deanhystad Wrote: This aptly named recursive function does what you want (I think).Thnks and I forgot to write that limits length can be more than 2 :) so I think yes, itertools is good fit
def dumb_recursion(a, a_end, a_incr, b, b_end, b_incr): if a >= a_end or b >= b_end: return result.append([a, b]) dumb_recursion(a, a+a_incr, a_incr, b + b_incr, b_end, b_incr) dumb_recursion(a + a_incr, a_end, a_incr, b, b_end, b_incr) result = [] dumb_recursion(1, 5, 1, 5, 20, 5) print(result)The tricky part is unwinding b all the way back to the start before incrementing a. This is really ugly code that is so much clearer as two loops.
def not_recursion(a, b): result = [] for i in range(*a): for j in range(*b): result.append([i, j]) return result print(not_recursion((1, 5, 1), (5, 20, 5)))And this would start you thinking "Multiplying lists must be a common thing in such a list heavy language as Python. I wonder if there are any functions that do this?" And you do a little looking around and you find you can do this in one line.
And I think the Towers of Hanoi recursive solution is stupid too.