Hamido - 1 month ago 6

Python Question

I have a question regarding function-calls using if-statements and recursion.

I am a bit confused because python seems to jump into the if statements block even if my function returns "False"

Here is an example:

`1 def function_1(#param):`

2 if function_2(#param):

3 #do something

4 if x<y:

5 function_1(#different parameters)

6 if x>y:

7 function_1(#different parameters)

My function_2 returns "False" but python continues the code on line 5 for example. Can anyone explain this behavior? Thanks in advance for any answers.

edit: Sorry, forgot the brackets

concrete example:

`1 def findExit(field, x, y, step):`

2 if(isFieldFree(field, x, y)):

3 field[y][x] = filledMarker

4 findExit(field, x + 1, y, step+1)

5 findExit(field, x - 1, y, step+1)

6 findExit(field, x, y + 1, step+1)

7 findExit(field, x, y - 1, step+1)

8 elif(isFieldEscape(field, x, y)):

9 way.append(copy.deepcopy(field))

10 wayStep.append(step+1)

def isFieldFree(field, x, y):

if field[y][x] == emptyMarker:

return True

else:

return False

def isFieldEscape(field, x, y):

if field[y][x] == escapeMarker:

return True

else:

return False

After both functions "isFieldFree" and "isFieldEscape" return False python continues the code in line 5 sometimes in line 6.

Answer Source

You may misunderstand how recursion works, yes it continues at line 5 or 6 because the recursion has ended at a lower level in the call stack, so it continues at a higher-level in the call stack. Here's a sample call stack, note the next operation after `False`

is the next `findExit()`

at the higher call stack:

```
1 findExit(...):
2 True:
3 field assignment
4.1 findExit(x+1)
2 True
3 field assignment
4.1 findExit(x+1):
2 False # Does not jump to line 5 in current call stack.
5.1 findExit(x-1):
. ...
```