Code tính phần tử thứ N dãy Fibonacci dùng vòng lặp bị sai kết quả

Bài này test có 1 case bị sai, sửa giúp em với ạ.
Đề bài: Dãy số Fibonaci được xác định bởi công thức sau:
f(0) = 0 , f(1) = 1 , f (i) = f(i - 1) + f(i - 2)
Yêu cầu: Viết chương trình nhập vào số nguyên NN và đưa ra số fibonaci thứ N?
Bài em làm:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int N;
    cin >> N;
    int f0 = 0;
    int f1 = 1;
    int fN = 1;
    if (N == 0 or  N == 1)
    {
        cout << N;
    }
    for (int i = 2; i <= N ; i++)
    {  fN = f0 + f1;
        f0 = f1;
        f1 = fN;
    }
    cout << fN;
}

Nếu n = 1 thì code của bạn bị in 2 lần đúng không? Vậy bạn sửa sao để mà in được chỉ 1 lần thôi.

2 Likes

Em sửa như này được chưa ạ:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int N;
    cin >> N;
    
    if (N == 0 or  N == 1)
    {
        cout << N;
    }
    else 
    {
     int f0 = 0;
     int f1 = 1;
     int fN = 0;
     for (int i = 2; i <=N ; i++)
     {  
        fN = f0 + f1;
        f0 = f1;
        f1 = fN;
     }
     cout << fN ;
        
    }
}

Bạn nộp thử là biết ngay mà :eyes:

2 Likes

Nó vẫn sai nên em mới hỏi :sweat_smile:

Giới hạn của n là bao nhiêu vậy bạn? Có khả năng bạn bị tràn số (fibonacci(n) có thể vượt quá kiểu int)

1 Like

0 <= N <= 50 ạ
Post at least 20 characters

fibonacci(50) = 12,586,269,025, vượt quá kiểu int rồi nên bạn đổi sang kiểu dữ liệu khác nhé.

4 Likes

Được rồi ạ, em cảm ơn.

Không liên quan lắm nhưng em thấy có biến đặt là “res” thì ý nghĩa của từ này là gì ạ.

res là viết gọn lại của từ result nhé.

2 Likes

Viết tắt của rest đấy, nghĩa là làm xong bài tập rồi, nghỉ thôi :grimacing:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?