def bunny(start, finish, length, way=[]): if not way: way = [start] if length == 0 and start == finish: return way elif length == 0 and start != finish: return way + [None] elif length != 0 and start == finish: return way + [None] else: ways = [bunny(start + 1, finish, length - 1, way=way + [start + 1]), bunny(start - 1, finish, length - 1, way=way + [start - 1]), bunny(start + 3, finish, length - 1, way=way + [start + 3]), bunny(start - 3, finish, length - 1, way=way + [start - 3])] nways = [] for w1 in ways: if not w1: continue if type(w1[0]) is list: for w2 in w1: if w2[-1] is not None: nways.append(w2) else: if w1[-1] is not None: nways.append(w1) return nways