1.用循環的方法實現:
num = int(input())
factorial = 1 # 1
for i in range(1,num + 1): # 2
factorial *= i # 3
print(factorial)
1.1 這是初始化階乘,這裏的factorial
沒有實際含義,只是一個變量名
1.2 循環,左閉右開,所以右邊的num+1
實際上是值循環到num
1.3 factorial *= i
拆分開來是factorial = factorial * 1
,相當於每次循環都把i乘一下factorial
並再次賦值給factorial
,最終結果是 一個1 * 2 * 3 * 4 ...
的循序一直乘到你的num
爲止。
2.用遞歸的方法實現:
def factorial(n):
if n == 1: # 1
return n
return n * factorial(n - 1) # 2
num = int(input())
print(factorial(num)) # 3
2.1 設置一個下限,當n == 1
時,返回n
,使其不要再執行下面的factorial(n - 1)
2.2 返回 n * factorial(n - 1)
,factorial(n - 1)
爲調用自己本身的函數,n - 1
爲實參,相當於把n
進行-1
操作,比如輸入的num
爲4
,那這裏的n-1
就爲3
,把3
傳進factorial
再進行計算,就相當於是4 * 3 * 2 * 1
2.3 最後調用factorial
函數,括號裏面的num
爲實參,是實際意義上的參數,是一個實際存在的參數,n
爲形參,形式上的參數,可以理解爲數學的X
,沒有實際的值,括號裏面的num
傳進去才能進行計算,最後再打印出結果。
小結
遞歸的要求
遞歸算法所體現的“重複”一般有三個要求:
(1)每次調用在規模上都有所縮小(通常是減半)
(2)是相鄰兩次重複之間有緊密的聯繫,前一次要爲後一次做準備(通常前一次的輸出作爲後一次的輸入)
(3)在問題的規模極小時必須用直接給出解答而不再進行遞歸調用,因而每次遞歸調用都是有條件的(以規模位達到直接解答的大小爲條件)無條件遞歸調用將會成爲死循環而不能正常結束。