Phép nhân cần cơ sở 1
Xét n nguyên không âm; với lũy thừa, trong bài chọn $a\ne0$. Các cơ sở $0!=1$ và $a^0=1$ giữ đúng giá trị của phép tích.
```python
def giai_thua(n):
if n == 0:
return 1
return n * giai_thua(n - 1)
def luy_thua(a, n):
if n == 0:
return 1
return a * luy_thua(a, n - 1)
```
Ví dụ giai_thua(4)=4×3×2×1×1=24; luy_thua(−2,3)=(−2)×(−2)×(−2)×1=−8. Nếu thay cơ sở của giai thừa bằng 0, mọi tích sau đó cũng thành 0, không còn đúng giai thừa.
Mang theo giai thừa đã tính
Cần tính $1!+2!+\cdots+n!$. Trước bước k, đặt p bằng $(k-1)!$; nhân p với k để có k!, rồi cộng k! vào phần còn lại.
```python
def tong_giai_thua(p, k, n):
if k > n:
return 0
p = p * k
return p + tong_giai_thua(p, k + 1, n)
```
Lời gọi đầu là tong_giai_thua(1,1,n). Với n=4, các giá trị p được cộng là1,2,6,24, nên kết quả 33. K tăng dần nhưng số bước còn lại giảm; khi k>n thì không còn số hạng cần cộng. Không phải mọi tham số đều phải giảm mới là đệ quy đúng.
Cùng kết quả có thể tính bằng vòng lặp
Tổng giai thừa cũng có thể tính bằng cách giữ p và tổng s trong một vòng lặp. Mỗi bước cập nhật p rồi mới cộng p vào s:
```python
p = 1
s = 0
for k in range(1, 5):
p = p * k
s = s + p
print(s)
```
Đoạn này in 33 như lời gọi đệ quy với n=4. Hai cách khác cách điều khiển, không khác yêu cầu tính tổng. Với n=0, không có số hạng từ 1! trở đi nên tổng bằng 0.
Bài luyện
Cơ sở nào đúng cho hàm giai_thua tính n! với n nguyên không âm?
Cách đó chưa kết thúc ở0.
Phép nhân không tự dừng lời gọi.
0! được quy ước bằng 1.
Cơ sở0 làm các tích tiếp theo thành 0.
Lời giải
0!=1 là cơ sở. Với n>0, lấy n nhân giai thừa của n−1; cơ sở1 cho kết quả đúng, còn cơ sở0 sẽ làm mọi tích sau đó bằng 0.
Bài luyện
Với hàm luy_thua trong bài, luy_thua(-2,3) trả về bao nhiêu?
Lũy thừa bậc lẻ của−2 vẫn âm.
−6 là cộng ba lần−2, khác phép nhân.
Không phải cộng ba lần2.
Ba thừa số−2 cho tích−8.
Lời giải
Lũy thừa dùng phép nhân: (−2)×(−2)×(−2)×1=−8. Cơ sở khi số mũ0 là1.
Bài luyện
`tong_giai_thua(1,1,4)` trong bài trả về bao nhiêu?
1!+2!+3!+4!=1+2+6+24.
24 chỉ là4!, chưa cộng các số hạng trước.
10 là1+2+3+4.
34 đã cộng thêm 0!, ngoài tổng từ 1!.
Lời giải
Các bước k=1,2,3,4 cho các giá trị p là1,2,6,24. Khi k=5 thì hàm trả 0; tổng là1+2+6+24=33.
Đang học