一旦程式功能變多,相同的功能的程式碼會重複出現,導致程式碼太長、太醜、太難修改,所以需要函式來簡化 - 相同事件只要寫一次就好。
函式(function):可以設置參數,也可以數值傳給其他函式,以及return value。
語法:def functionName():
用:
縮排來表示function區塊。
簡單範例:
def try_function(): # 定義try_function()函式
print("hello world") # 函式的工作是印出hello world
return(1+1) #函式回傳的值
x = try_function() # 呼叫try_function()函式,函式回傳的值放進x變數中
print(x)
結果:
hello world
2
def try_function(name): # 定義try_function()函式,接收name這個參數
print("Hello " + name) # 函式的工作是印出Hello 加上參數name的值
try_function("wsrsw") # 呼叫try_function()函式,函式帶入'wsrsw'參數
結果:
Hello wsrsw
2
簡單運算範例:
def name_age(name, year):
age = 2019 - year
print("Name: ", name)
print("Age: ", age)
name = input('輸入你的名字: ')
year = int(input('輸入你的出生年: '))
name_age(name, year)
結果:
輸入你的名字: qwe
輸入你的出生年: 1990
Name: qwe
Age: 29
在解決問題時有時需要回到上一個計算或者需要應用到上一個解法的答案,此時就是利用遞迴的概念來撰寫一個函式。
n! = 1 x 2 x ... x (n-1) x n
=>n! = n x (n-1)!
=>n! = n x (n-1) x (n-2) x (n-3) ... x 1
3! = 321
Factorial(3)
= 3 * Factorial(2)
= 3 * 2 * Factorial(1)
= 3 * 2 * 1
範例:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
num = int(input('請輸數數字: '))
answer = factorial(num)
print(str(num) + '! = ' + str(answer))
結果:
請輸數數字: 4
4! = 24
在數學上,費氏數列是以遞迴的方法來定義:
F0 = 0
F1 = 1
Fn = F(n-1) + F(n-2), (n>=2)
費氏數列由0和1開始,之後由之前的兩數相加而得出。
用陣列表示:
F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 |
用樹枝狀表示:
範例:
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
return fib(n-1) + fib(n-2)
num = int(input('請輸數數字: '))
answer = fib(num)
print('F' + str(num) + ' : ' + str(answer))
結果:
請輸數數字: 10
F10 : 55
使用輾轉相除法!
輾轉相除法-維基百科
每次用兩者間較小的數去對另一個數取餘數,用餘數和較小的數進行再次進行一樣的步驟。
GCD、LCM 範例:
def gcd(m, n):
if n == 0:
return m
else:
return gcd(n, m % n)
def lcm(m, n):
return m * n // gcd(m, n)
m = int(input("輸入 m:"))
n = int(input("輸入 n:"))
print("Gcd: ", gcd(m, n))
print("Lcm: ", lcm(m, n))
結果:
輸入 m:252
輸入 n:105
Gcd: 21
Lcm: 1260