btvn.vn
Tìm kiếm Đăng nhập

Đổi nhị phân sang thập phân bằng đệ quy

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Đệ quy · Chọn bài khác

Ghép thêm một chữ số ở bên phải

Xét xâu không rỗng s chỉ gồm các kí tự 0 và 1. Khi ghép thêm một chữ số ở bên phải biểu diễn nhị phân, mỗi chữ số cũ tăng một bậc nên giá trị phần cũ được nhân 2; sau đó cộng chữ số mới. Gọi D(n) là giá trị của n kí tự đầu. Với $n=1$, $D(1)=\operatorname{int}(s[0])$. Với $n>1$: $$D(n)=2D(n-1)+\operatorname{int}(s[n-1]).$$ Hàm int đổi kí tự `'0'` hoặc `'1'` thành số để tính toán.

Dừng khi phần đầu chỉ còn một kí tự

```python def dec(s, n): if n == 1: return int(s[0]) return 2 * dec(s, n - 1) + int(s[n - 1]) ``` Gọi `dec(s, len(s))`. Điều kiện của hàm là s không rỗng, chỉ gồm 0/1 và 1≤n≤len(s). Xâu `'0'` là đầu vào hợp lệ và cho 0; xâu rỗng không thuộc điều kiện của hàm này, cần được chặn trước khi gọi.

Theo dõi giá trị khi các lời gọi trả về

Với s=`'10101'`, các lời gọi đi từ n=5 về cơ sở n=1. Khi trả về, phần đầu dài dần như sau: | Phần đầu | Cách tính | Giá trị | |---|---|---| | 1 | Cơ sở | 1 | | 10 | 2×1+0 | 2 | | 101 | 2×2+1 | 5 | | 1010 | 2×5+0 | 10 | | 10101 | 2×10+1 | 21 | Mỗi bước ghép thêm đúng chữ số cuối của phần đầu đang xét, không cộng trực tiếp tất cả các chữ số.

Khi đầu vào là danh sách các số 0 và 1

Với A là danh sách số nguyên 0/1, A[n−1] đã là số nên không cần int. Bản dưới chọn cơ sở n=0 để giá trị phần đầu rỗng bằng 0: ```python def dec_list(A, n): if n == 0: return 0 return 2 * dec_list(A, n - 1) + A[n - 1] ``` Gọi với n=len(A); điều kiện là 0≤n≤len(A). Ví dụ [0,1,0,1] cho 5; chữ số 0 đầu không làm đổi giá trị. Quy ước phần đầu rỗng bằng 0 của hàm này không làm xâu rỗng trở thành một biểu diễn nhị phân hợp lệ cho hàm dec ở trên.

Bài luyện

Theo hàm dec trong bài, dec('10101',5) trả về bao nhiêu?
Chọn một đáp án

Bài luyện

Vì sao bước ghép chữ số cuối cần nhân giá trị phần đầu với 2?
Chọn một đáp án

Bài luyện

Hàm dec chọn cơ sở n==1. Nhận xét nào đúng về hai đầu vào '0' và xâu rỗng?
Chọn một đáp án

Bài luyện

Với bản dec_list trong bài, dec_list([0,1,0,1],4) trả về bao nhiêu?
Chọn một đáp án

Đang học