It is not very clear for me the recursive call of contract's functions. As described in white and yellow papers, a contract program code calls an external contract's function, it has to wait until the called function returns or an exception occurs. Assume that in a function of contract A, it calls a function of contract B with the address of the contract A (at this point, the contract A code has to wait the return from contract B code). However, inside the called function of the contract B, it sends some Weis to the address of the contract A, meaning that the code of contract A will execute. Does it happen that A is waiting for B and B is waiting for A in the same time?