2 AnswersNew Answer
It's simple. This is how it's working. Suppose you're checking for 4 if it's even or not. is_even(4) will call is_odd(3) which inturn returns the 'not' of is_even(3) so basically understand it's propagation like: (4) -> !(3) -> (2) -> !(1) -> (0) Now when it reaches to 0, its the termination condition. Now it'll start propagating backwards like: !False <- !True <- !False <- !True <- True Since 0 will return True, but 1 will return 'not' of what 0 returns 'cuz of that is_odd function which returns 'not' of whatever is being returned by is_even function. Hence 1 will return False. Lol, lot of 'return' words. Don't get confused. Think it step by step. And similarly 2 will return 'not' of whatever returned by 1, in this case True. 1 is returning false, 2 is returning True, now it should make sense. And similar way down to 4 which will return 'not' of 3 that is True.