什么是遞歸?簡單的說就是:函數自身調用自身。
“普通程序員用迭代,天才程序員用遞歸”
雖然遞歸 在運行時會不斷出棧壓棧,調用底層的寄存器,造成空間上的占用以及時間上的緩慢,
但在一些算法上面仍然是遞歸很實用
但需要注意的是:
#遞歸是自己調用自己 很消耗時間,還會有消耗空間的危險,所以遞歸遞歸一定要知道“歸去來兮”
#所謂“歸去來兮”就是指遞歸的兩個原則:
#1.調用了函數自身
#2.設置了自身正確的返回值 (必須有一個正確的返回停止條件,不能無限下去)
舉簡單的例子
下面是用迭代和遞歸實現的階乘的對比:
#用循環函數實現階乘: def factorial(n): for i in range(1,n): n *= i return n #遞歸版本的階乘實現: def factorial(n): if n == 1: return 1 else: return n * factorial(n-1)
下面是用迭代和遞歸實現的Fibonacci數列的對比:
# Fibonacci 數列的遞歸實現: #1.用迭代的方式實現 def Fibonacci(n): n1 = 1 n2 = 1 n3 = 2 if n < 0: return -1 print('Error,please enter a correct month...') elif n == 1: return n1 elif n == 2: return n2 else: for i in range(3,n+1): n3 = n2 + n1 n1 = n2 n2 = n3 return n3 #2.用遞歸的方式實現 def fab(n): if n < 1: print('輸入有誤...') return -1 elif n == 1 or n == 2: return 1 else: return fab(n-1) + fab(n-2)