Đây là chương trình để tìm ra thừa của một số trong Go:Go mã không biên dịch mà không có một lệnh return unreachable
func factorial(x uint) uint {
if x == 0 {
return 1
}
return x * (factorial(x - 1))
}
Kết quả cho chức năng này khi kêu gọi đầu vào 5 là 120. Tuy nhiên, nếu tôi thêm tuyên bố else
tôi sẽ gặp lỗi.
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
}
Lỗi: function ends without a return statement
Tôi đã thêm một return
ở cuối:
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
fmt.Println("this never executes")
return 1
}
và tôi lấy lại kết quả mong muốn của 120.
Tại sao trường hợp thứ hai sẽ gây ra một lỗi? Tại sao trong trường hợp thứ ba mặc dù chức năng không bao giờ đạt đến cuối cùng return 1
, nó tính toán đầu ra chính xác?
Đó là thành ngữ trong Đi tới để sử dụng 'if cond {return}; return' (không phải trên một dòng rõ ràng). Khi bạn có vô tận cho các vòng lặp bất cứ nơi nào sau khi vòng lặp không thực thi, thành ngữ phổ biến là thêm 'hoảng loạn (" không thể truy cập ")'. –
làm cho câu lệnh cuối cùng là 'hoảng loạn (" không bao giờ đạt được ")' – thwd