Istnieją dwa twarde części o tej funkcji.
1. lambda a, b: b*a(a, b-1) if b > 0 else 1
.
2. "b", który jest folowing 1.
za 1, to nic więcej niż:
def f(a, b):
if b > 0:
b * a(a, b - 1)
else:
1
dla 2, tym b
(lambda b: (lambda a, b: a(a, b))(lambda a, b: b*a(a, b-1) if b > 0 else 1,b))(num)
(this one)
jest faktycznie to b:
(lambda b: (lambda a, b: a(a, b))(lambda a, b: b*a(a, b-1) if b > 0 else 1,b))(num)
(this one)
Powodem jest to, że nie znajduje się on w definicji drugiej i trzeciej wartości lambda, więc odnosi się do pierwszego b.
Po stosuje NUMER i odpędzenia zewnętrzną funkcję:
(lambda a, b: a(a, b)) (lambda a, b: b*a(a, b-1) if b > 0 else 1, num)
Po prostu zastosowanie funkcji w krotce, (N a, b: b * a (a, b-1), jeśli B> 0 else 1, num)
Nazwijmy ten krotki jako (f, num) (def f jest powyżej) Stosowanie lambda a, b: a(a, b)
na nim, otrzymujemy
f (f, NUM).
Załóżmy, że num to 5.
Przez zaliczane do f, najpierw ocenia się
5 * f(f, 4)
następnie:
5 * (4 * f(f, 3))
całą drogę w dół do
5 * (4 * (3 * (2 * (1 * f(f, 0)))))
f (f, 0) przechodzi na 1.
5 * (4 * (3 * (2 * (1 * 1))))
Tutaj idziemy, silnia 5.
mam lepszy: 'lambda b: math.factorial (b)' – JBernardo
Dont narastającymi kwadratowe koło. – ShuklaSannidhya