Hãy tưởng tượng chúng tôi có mã này hoạt động hoàn hảo cho n >= 0
.Một cách ngắn gọn để không thực thi vòng lặp bây giờ là C-Style cho các vòng lặp sẽ bị xóa khỏi Swift 3?
func fibonacci(n: Int) -> Int {
var memo = [0,1]
for var i = 2; i <= n; i++ {
memo.append(memo[i-1] + memo[i-2])
}
return memo[n]
}
Nếu tôi loại bỏ C-phong cách cho vòng lặp due to upcoming changes to Swift 3.0, tôi nhận được một cái gì đó như thế này:
func fibonacci(n: Int) -> Int {
var memo = [0,1]
for i in 2...n {
memo.append(memo[i-1] + memo[i-2])
}
return memo[n]
}
Trong khi điều này hoạt động tốt cho n >= 2
, nó không thành công cho những con số 0
và 1
với thông báo lỗi này :
fatal error: Can't form Range with end < start
Cách ngắn gọn nhất để sửa mã này để mã hoạt động chính xác cholà gìvà 1
?
(Lưu ý: Không sao đâu, và thậm chí mong muốn, cho số âm sụp đổ các ứng dụng.)
Lưu ý: Tôi nhận ra tôi có thể thêm một tuyên bố bảo vệ:
guard n >= 2 else { return memo[n] }
... nhưng tôi hy vọng có một cách tốt hơn để khắc phục phần lỗi của mã (2...n
).
Ví dụ: nếu có cách súc tích để tạo dải ô trả về 0 thành phần nếu end < start
, đó sẽ là giải pháp lý tưởng hơn.
Tôi nghĩ rằng giải pháp 'bảo vệ 'sẽ là phù hợp nhất. – zneak