Tôi có hai, giải pháp đơn giản scala đệ quy cho bạn. Ý tưởng cơ bản là, như vậy không được vượt quá một vòng rưỡi, mà sẽ xảy ra là 3 trong trường hợp của chúng tôi, nhưng tất nhiên có thể được parametrized:
def fromAtoBClockwise (a: Int, b: Int) : Boolean = {
if (a > b) ! fromAtoBClockwise (b, a)
else b - a <= 3 }
Khoảng cách không được vượt quá 3, nhưng để tránh trừ 1 - 5, chúng ta chuyển các tham số và đảo ngược kết quả, nếu a> b.
def fromAtoBClockwise (a: Int, b: Int) : Boolean = {
if (a > b) fromAtoBClockwise (a, b + 6)
else b - a <= 3 }
Một cách khác là, chỉ cần thêm 6, kích thước của vòng tròn, thành b, nếu nó thấp hơn.
Cả hai công việc, nhưng đôi khi khác nhau về kết quả, nếu cả hai cách có chiều dài bằng nhau.
Với tham số cho kích thước và kích thước lẻ, bạn sẽ có được kết quả tương tự cho cả hai:
def fromAtoBClockwise (a: Int, b: Int, size: Int) : Boolean = {
if (a > b) ! fromAtoBClockwise (b, a, size)
else b - a <= size/2 }
def fromAtoBClockwise (a: Int, b: Int, size: Int) : Boolean = {
if (a > b) fromAtoBClockwise (a, b + size, size)
else b - a <= size/2 }
thử nghiệm (sản lượng ngưng tụ):
(1 to 5).map (a => (1 to 5).map (b => { if (a != b) println (a + " " + b + " " + fromAtoBClockwise (a, b, 5))}))
1 2 true 1 3 true 1 4 false 1 5 false
2 1 false 2 3 true 2 4 true 2 5 false
3 1 false 3 2 false 3 4 true 3 5 true
4 1 true 4 2 false 4 3 false 4 5 true
5 1 true 5 2 true 5 3 false 5 4 false
Are những con số luôn theo thứ tự? "Tầm nhìn" của bạn là gì? – Nicholas
Có, các số luôn theo thứ tự và bạn "thấy" (biết) tất cả các số. –
Thực hiện phép trừ mô đun (cơ sở n) và sử dụng ngưỡng trên n/2. – ElKamina