Hãy xem xét chúng ta có một mảng tròn chứa các số nguyên từ 1 đến n. Tìm phần tử cuối cùng, sẽ vẫn còn trong danh sách sau khi xóa mọi phần tử thứ hai bắt đầu từ phần tử đầu tiên. Nếu đầu vào là 5, thì mảng sẽ là [1, 2, 3, 4, 5]. Bắt đầu từ 1. Sau khi xóa từng phần tử thứ hai sẽ như thế nào -
1 0 3 4 51 0 3 0 50 0 3 0 50 0 3 0 0
Vì vậy, phần tử vẫn còn trong danh sách là 3.
Chúng tôi sẽ giải quyết vấn đề này bằng cách sử dụng đệ quy. Giả sử n chẵn. Các số 2, 4, 6 sẽ bị loại bỏ, sau đó chúng ta sẽ bắt đầu lại từ số 1. Vậy n / 2 số bị loại bỏ. Và chúng ta bắt đầu như thể 1 trong một mảng n / 2 chỉ chứa các chữ số lẻ 1, 3, 5,… n / 2. Vì vậy, chúng ta có thể viết công thức như -
điều kiện cơ bản là giải (1) =1.
Ví dụ
#includeusing namespace std; int deleteSecondElement (int n) {if (n ==1) return 1; if (n% 2 ==0) trả về 2 * deleteSecondElement (n / 2) - 1; else return 2 * deleteSecondElement (((n - 1) / 2)) + 1;} int main () {int n =5; cout <<"Phần tử Còn lại:" < Đầu ra
Phần tử còn lại:3 Phần tử còn lại:5