<span
class
=
"k"
>def</span> <span
class
=
"nf"
>fact</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>):</span>
<span
class
=
"k"
>
if
</span> <span
class
=
"n"
>n</span> <span
class
=
"o"
>==</span> <span
class
=
"mi"
>0</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"mi"
>1</span>
<span
class
=
"k"
>
else
</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"n"
>n</span> <span
class
=
"o"
>*</span> <span
class
=
"n"
>fact</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span> <span
class
=
"o"
>-</span> <span
class
=
"mi"
>1</span><span
class
=
"p"
>)</span>
<span
class
=
"nb"
>id</span> <span
class
=
"o"
>=</span> <span
class
=
"k"
>lambda</span> <span
class
=
"n"
>x</span><span
class
=
"p"
>:</span> <span
class
=
"n"
>x</span>
<span
class
=
"k"
>def</span> <span
class
=
"nf"
>factCPS</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>):</span>
<span
class
=
"k"
>def</span> <span
class
=
"nf"
>f</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>):</span>
<span
class
=
"k"
>
if
</span> <span
class
=
"n"
>n</span> <span
class
=
"o"
>==</span> <span
class
=
"mi"
>0</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>(</span><span
class
=
"mi"
>1</span><span
class
=
"p"
>)</span>
<span
class
=
"k"
>
else
</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"n"
>f</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span> <span
class
=
"o"
>-</span> <span
class
=
"mi"
>1</span><span
class
=
"p"
>,</span> <span
class
=
"k"
>lambda</span> <span
class
=
"n"
>x</span><span
class
=
"p"
>:</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span> <span
class
=
"o"
>*</span> <span
class
=
"n"
>x</span><span
class
=
"p"
>))</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"n"
>f</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>,</span> <span
class
=
"nb"
>id</span><span
class
=
"p"
>)</span>
<span
class
=
"k"
>def</span> <span
class
=
"nf"
>factNoRec</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>):</span>
<span
class
=
"k"
>def</span> <span
class
=
"nf"
>factory</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>):</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"k"
>lambda</span> <span
class
=
"n"
>x</span><span
class
=
"p"
>:</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span> <span
class
=
"o"
>*</span> <span
class
=
"n"
>x</span><span
class
=
"p"
>)</span>
<span
class
=
"n"
>k</span> <span
class
=
"o"
>=</span> <span
class
=
"nb"
>id</span>
<span
class
=
"k"
>
while
</span> <span
class
=
"bp"
>True</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
if
</span> <span
class
=
"n"
>n</span> <span
class
=
"o"
>==</span> <span
class
=
"mi"
>0</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>(</span><span
class
=
"mi"
>1</span><span
class
=
"p"
>)</span>
<span
class
=
"k"
>
else
</span><span
class
=
"p"
>:</span>
<span
class
=
"n"
>k</span> <span
class
=
"o"
>=</span> <span
class
=
"n"
>factory</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>)</span>
<span
class
=
"n"
>n</span> <span
class
=
"o"
>-=</span> <span
class
=
"mi"
>1</span>
<span
class
=
"k"
>def</span> <span
class
=
"nf"
>factHolyCrap</span><span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>):</span>
<span
class
=
"n"
>k</span> <span
class
=
"o"
>=</span> <span
class
=
"p"
>()</span>
<span
class
=
"k"
>
while
</span> <span
class
=
"bp"
>True</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
if
</span> <span
class
=
"n"
>n</span> <span
class
=
"o"
>==</span> <span
class
=
"mi"
>0</span><span
class
=
"p"
>:</span>
<span
class
=
"n"
>x</span> <span
class
=
"o"
>=</span> <span
class
=
"mi"
>1</span>
<span
class
=
"k"
>
while
</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>:</span>
<span
class
=
"n"
>x</span> <span
class
=
"o"
>=</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>[</span><span
class
=
"mi"
>0</span><span
class
=
"p"
>]</span> <span
class
=
"o"
>*</span> <span
class
=
"n"
>x</span>
<span
class
=
"n"
>k</span> <span
class
=
"o"
>=</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>[</span><span
class
=
"mi"
>1</span><span
class
=
"p"
>]</span>
<span
class
=
"k"
>
return
</span> <span
class
=
"nb"
>id</span><span
class
=
"p"
>(</span><span
class
=
"n"
>x</span><span
class
=
"p"
>)</span>
<span
class
=
"k"
>
else
</span><span
class
=
"p"
>:</span>
<span
class
=
"n"
>k</span> <span
class
=
"o"
>=</span> <span
class
=
"p"
>(</span><span
class
=
"n"
>n</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>k</span><span
class
=
"p"
>)</span>
<span
class
=
"n"
>n</span> <span
class
=
"o"
>-=</span> <span
class
=
"mi"
>1</span>
<span
class
=
"k"
>
if
</span> <span
class
=
"n"
>__name__</span> <span
class
=
"o"
>==</span> <span
class
=
"s"
>
'__main__'
</span><span
class
=
"p"
>:</span>
<span
class
=
"k"
>
print
</span><span
class
=
"p"
>([</span><span
class
=
"n"
>f</span><span
class
=
"p"
>(</span><span
class
=
"mi"
>5</span><span
class
=
"p"
>)</span> <span
class
=
"k"
>
for
</span> <span
class
=
"n"
>f</span> <span
class
=
"ow"
>in</span> <span
class
=
"p"
>[</span><span
class
=
"n"
>fact</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>factCPS</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>factNoRec</span><span
class
=
"p"
>,</span> <span
class
=
"n"
>factHolyCrap</span><span
class
=
"p"
>]])</span>