1. Recursive function
1.1. Limitations of Recursive functions
(1) Recursive must have exit conditions, and recursive call must be executed to this exit condition, if there is no exit condition, is infinite call, will exhaust all resources (stack space);
(2) The depth of recursive calls is not too deep, Python limits the depth of recursive calls to protect the interpreter;
1.2. Recursive instances
①, recursive implementation of the thin-cut sequence
#Version1: Mathematical formula versiondeffib (n):return1ifN<3ElseFIB (n-1) +fib (n-2)Print(FIB (10) Analysis: Although this version looks concise and clear, but there will be a lot of efficiency problems, when the N operation 35 after the calculation results are very slow#Version2: Using the last resultdefFIB (n,a=0,b=1):#n=3 ifN<3: returnA +bElse: A, b=b,a+b#0,1=1,1 returnFIB (n-1, A, b) analysis: The version uses the result of the last operation every time, so the efficiency is much faster than the first version;#for loop Implementationa,b=0,1 forIinchRange (10): A, B=b,a+bPrint(a) Analysis: Version Two is based on the For Loop Evolution
②, recursive implementation of factorial
def FAC (n,sum=1): if n==1: return 1 return N*FAC (n-1) def FAC (n,sum=1): sum=sum*n if n<2: return sum return FAC (n-1, sum)# version Two brings the results of each calculation into the next calculation
③, put a number in reverse order into the list
nums='1234'Print(Nums[len (nums)-1]) L=[] forIinchRange (len (nums) -1,-1,-1): L.append (Nums[i])Print(L)
# for Loop implementation
defrevert (x):ifx = =-1: return [] return[Nums[x]] + revert (x-1)Print(Revert (Len (nums)-1))
# List Stitching ImplementationdefRevert (x,target=[]): ifX:target.append (x[-1]) revert (x[:-1]) returnTargetPrint(Revert (Nums))
# string Slicing Real
④ and recursion to solve the problem of monkey eating peach
" "Xd1=x//2-1D2=d1//2-1D3=d2//2-1... D9=d8//2-1 ==> 2 (d9+1) =d8=d7/2-1" "peach=1for i in range (9): peach=2* (peach+1) print (peach)" "the problem has to be pushed backwards. The 10th day has not eaten, left 1, the 9th day ate half eat 1 still left 1, assuming that the 9th day has not eaten before there is a peach p, can get: P* 1/2-1 = 1, available p = 4. And so on, you can calculate the hand. The code idea is: the 10th day has not eaten before the peach number initialization P= 1, followed from 9 to 1 cycles 9 times, according to the above formula to push back to P = (p+1) * 2The number of peaches before the 1th day is not eaten.
The print () statement in the For loop is added to validate the extrapolation process. The code is as follows:P= 1Print('There are 1 peaches left before the 10th day of eating .') forIinchRange (9, 0, 1): P= (p+1) * 2Print('%s a peach before the first day of eating'%(i, p))Print('A total of%s Peaches were picked up on the 1th day.'%p)" "# Recursive Implementation def Peach (n=10): if n = = 1:return 1 return (Peach (n-1) +1) *2print (Peach ())
2. Anonymous function 3, generator 4, insert sort
Python Learning week5-recursion, anonymous function, generator