Suy đoán Collatz: Với số n dương, lặp: nếu chẵn → n/2, nếu lẻ → 3n+1. Suy đoán khẳng định dãy luôn về 1. Kiểm tra bằng đệ quy + set lưu các giá trị đã gặp để phát hiện vòng lặp.
Ví dụ
#include <bits/stdc++.h>
using namespace std;
bool check1(int n, unordered_set<int> &s) {
if (n == 1) return true;
if (s.find(n) != s.end()) return false;
s.insert(n);
return (n % 2) ? check1(3 * n + 1, s) : check1(n / 2, s);
}
bool if_one(int n) {
unordered_set<int> s;
return check1(n, s);
}
int main() {
int n = 234;
if_one(n) ? cout << "Yes" : cout << "No";
return 0;
}
Kết quả
Yes