Giúp giải thích đoạn code tính số Fibonacci

tại sao lại cần dòng em comment lại vậy ạ
comment lại thì chạy bị lỗi còn bỏ comment chạy bthg ạ, em cảm ơn

#include <stdio.h>

long fibo[100];

long fibonacci(int n) {
if(n==1 || n==2) return 1;
	// if (fibo[n]) return fibo[n];
fibo[n]=fibonacci(n-1) + fibonacci(n-2);
return fibo[n];
}

int main() {
	int n, k;
fibo[1] = 1;
fibo[2] = 1;
fibonacci(92);
scanf("%d", &k);
while (k--) {
    scanf("%d", &n);
    printf("%ld\n", fibo[n]);
}
return 0;
1 Like

Treo máy đấy chứ lỗi đâu :smiley: nhưng còn lỗi tràn số, bạn phải viết thêm mới tính đúng được.

Bỏ dòng đó thời gian chạy sẽ tỉ lệ với số Fibonacci, mà F(92) là gần hết mức của long long 2^64.

4 Likes

Ý bạn nói lỗi là lỗi gì? Kết quả không đúng? Nói chung chung thế hả?

Theo @rogp10 nói thì tính fibonacci đến 100 là quá lắm đấy, kiểu long chứa không nổi đâu. Với đệ quy kép thế kia thì siêu lâu luôn. Tất nhiên, bạn dùng mảng để lưu trữ số fibo đã tính trước đó để rút ngắn thời gian thay cho đệ quy, nhưng có 1 vấn đề ở mảng fibo[100] đó: giá trị rác.

3 Likes

nhưng mà gặp return là dừng vậy thì lưu trữ kiểu gì được

bạn giải thích cho mình đoạn lưu trữ được không tại đoạn code kia không phải mình viết , thanks

fibo[] là mảng toàn cục nên nó tồn tại đến khi đóng chương trình.

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