recursion stack only space
def rc(nums, index = start, visited = 0): # [4,2,3,0,3,1,2]
if index < 0 or index >= len(nums) or (visited & (1 << index)):
return False
return nums[index] == 0 or rc(nums, index - nums[index], visited | 1 << index) or rc(nums, index + nums[index], visited | 1 << index)