为什么这是树递归
因为return A条件 and (B 条件 or (C 条件 and D条件) or E条件)
当B条件不成立,应该是进入随后的or表达式组( C条件 and D条件),但是由于D条件是递归,在递归过程中应该有返回False
所以就当导致(C条件==True and D条件==False) == False,进而会执行E条件is_a_zero.所以就形成了树型递归。而上面的线性递归,因为多了E条件前多了一个func(middle)>0做为判断,如果处于func(middle0<0的表达式组则func(middle>0)不会成立,所以是线性递归
顺便说下if/else 和and or
if garde >= 90:
print('very good')
elfi garde <90 and garde > 75:
print('good')
else:
print('worse')
return ((garde >= 90 and print('very good')) or ((garde < 90 and garde > 75) and print('good)) or print('worse'))
A条件 and B表达式 等价于 if A条件: B表达式
所以整个if else就转换成 ( (A条件 and B表达式) or (A条件 and C表达式 ) or (A条件 and D表达式))
另一种写法:条件表达式
return 条件A ? 表达式X: 表达式Y
long Rescuvie(long n)
{
return(n==1)? 1:n * Rescuvie(n-1);
}