遞迴是解決問題的一種方式,它和迴圈很像
它的整體思想是,將乙個大問題分解為乙個個的小問題,直到問題無法分解時,再去解決問題
遞迴式函式的兩個要件
1.基線條件
2.遞迴條件
例題:編寫求n!的遞迴函式
分析:n!等於1 * 2 * … * (n-1) * n
n!也等於n * (n-1)!
比如:10! = 10 * 9!
9! = 9 * 8!
8! = 8 * 7!
…1! = 1
**:
def
factorial
(n):
''' 該函式用來求任意數的階乘
引數:n 要求階乘的數字
'''# 基線條件 判斷n是否為1,如果為1則此時不能再繼續遞迴
if n ==1:
# 1的階乘就是1,直接返回1
return
1# 遞迴條件
return n * factorial(n-1)
print
(factorial(10)
)
練習一:建立乙個函式 power 來為任意數字做冪運算 n ** i
分析:n**i = n * (n ** (i-1))
比如:10 ** 5
10 ** 5 = 10 * 10 ** 4
10 ** 4 = 10 * 10 ** 3
…10 ** 1 = 10
**:
def
power
(n , i)
:'''
power()用來為任意的數字做冪運算
引數:n 要做冪運算的數字
i 做冪運算的次數
'''# 基線條件
if i ==1:
# 求1次冪
return n
# 遞迴條件
return n * power(n , i-1)
print
(power(10,
5))
練習二:建立乙個函式,用來檢查乙個任意的字串是否是回文字串,如果是返回true,否則返回false
回文字串,字串從前往後念和從後往前念是一樣的
例如:
abcba
abcdefgfedcba
先檢查第乙個字元和最後乙個字元是否一致,如果不一致則不是回文字串
如果一致,則看剩餘的部分是否是回文字串
檢查 abcdefgfedcba 是不是回文
檢查 bcdefgfedcb 是不是回文
檢查 cdefgfedc 是不是回文
檢查 defgfed 是不是回文
檢查 efgfe 是不是回文
檢查 fgf 是不是回文
檢查 g 是不是回文
**:
def
hui_wen
(s):
''' 該函式用來檢查指定的字串是否回文字串,如果是返回true,否則返回false
引數:s:就是要檢查的字串
'''# 基線條件
iflen
(s)<2:
# 字串的長度小於2,則字串一定是回文
return
true
elif s[0]
!= s[-1
]:# 第乙個字元和最後乙個字元不相等,不是回文字串
return
false
# 遞迴條件
return hui_wen(s[1:
-1])
print
(hui_wen(
'abcdefgfedcba'
))
shell指令碼兩個小練習
編寫乙個shell指令碼,把第二個位置引數及其以後的各引數指定的檔案複製到第乙個位置引數指定的目錄裡。a.while迴圈實現 bin bash dir 1shift 命令列實參左移一位,未知引數右移一位 while 1 目錄不空 docp 1 dir shift shift實現迴圈 done建立目錄...
C 自學02 兩個小練習
using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 02 兩個小練習 天是週零天 days,weeks,day...
兩個小電路
第乙個是cmos與非門振盪電路 這個電路的原理其實是負反饋,b點反饋給a,因為a,b兩點的電壓相反所以是負反饋。又因為在a與e之間加了電容,所以是慢反饋,b和a如蹺蹺板兩端,在0與1之間來回跳變,那麼就會形成振盪,振盪頻率計算公式如下 第二個電路是電容降壓型穩壓電路 將交流市電轉換為低壓直流的常規方...