Code kiểm tra số hạng thứ n của dãy fibonacci bằng phương pháp đệ quy
Xin chào các bạn. Chẳng qua là mình vừa mới học thêm 1 phương pháp mới trong lập trình là giải thuật đệ quy. Bài tập cho phương pháp này ( tất nhiên sẽ có rất nhiều nhưng mình chỉ lấy 1 bài tập làm ví dụ) là Tìm số hạng thứ n trong dãy Fibonacci ( bạn nào không biết thì search Google ). Dưới đây là code mình tự làm:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>
int fibonacci (int n);
int main()
{
int n;
printf("Type a number: ");
while ((scanf("%d", &n))!= EOF)
printf("The result is: %d
", fibonacci(n));
return 1;
}
int fibonacci (int n)
{
if (n == 0)
return 1;
if (n == 1)
return 1;
if (n > 1)
return (fibonacci(n - 1))+(fibonacci(n - 2));
}
Đó. Ban đầu thì code mình chạy không đúng làm vì trong hàm Main mình để " return 0; " chứ không phải " return 1; ". Sau đó chạy không được, mình tìm hoài không biết lý do vì sao thì ngứa tay sửa số 0 thành số 1 thử và sau đó chạy thành công! Hơi hư cấu tí nhưng là sự thật, giờ mình cần 1 lời giải thích: Vì sao trong hàm Main lại là " return 1; " mà không phải " return 0; " và sao " return 1; " lại hoạt động?
Cảm ơn các bạn nhiều nhé! (Nhớ giải thích dễ hiểu, dài cũng được nhưng dễ hiểu vì mình trình độ còn non :))
Theo như lý thuyết là nó ko ảnh hưởng gì đến cách chạy chương trình cả, chỉ nghe nói là nếu cái hàm main mà khi return 0 nghĩa là chạy ok ko lỗi lầm gì, còn khác 0 là có lỗi, nhưng cũng là quy ước vs nhau thôi.
Bạn coi lại các phần khác coi thế nào nha ^^
return trong hàm main chẳng liên quan gì đến việc chạy đúng hay sai đâu, có thể là do bạn quên save hoặc quên build và chỉ run thôi nên kết quả trả về sai ấy.
còn cái return trong main chỉ là báo cho HĐH biết chương trình của ban đã kết thúc như thế nào thôi.
mình copy code của bạn về test thì thấy return 0 có lỗi gì đâu ạ? vẫn chạy bình thường mà
Hehe, mình bất cẩn quá
THẢO LUẬN XIN DỪNG TẠI ĐÂY NHÉ!
XIN LỖI VÌ ĐÃ LÀM MẤT THỜI GIAN CỦA CÁC BẠN!
Mọi người cho em hỏi cau lệnh này có EOF là gì;
(scanf("%d", &n))!= EOF[quote=“tucanhminh, post:1, topic:22713, full:true”]
Xin chào các bạn. Chẳng qua là mình vừa mới học thêm 1 phương pháp mới trong lập trình là giải thuật đệ quy. Bài tập cho phương pháp này ( tất nhiên sẽ có rất nhiều nhưng mình chỉ lấy 1 bài tập làm ví dụ) là Tìm số hạng thứ n trong dãy Fibonacci ( bạn nào không biết thì search Google ). Dưới đây là code mình tự làm:
Đó. Ban đầu thì code mình chạy không đúng làm vì trong hàm Main mình để " return 0; " chứ không phải " return 1; ". Sau đó chạy không được, mình tìm hoài không biết lý do vì sao thì ngứa tay sửa số 0 thành số 1 thử và sau đó chạy thành công! Hơi hư cấu tí nhưng là sự thật, giờ mình cần 1 lời giải thích: Vì sao trong hàm Main lại là " return 1; " mà không phải " return 0; " và sao " return 1; " lại hoạt động?
Cảm ơn các bạn nhiều nhé! (Nhớ giải thích dễ hiểu, dài cũng được nhưng dễ hiểu vì mình trình độ còn non :))
[/quote]
(scanf("%d", &n))!= EOF
Cái câu này nghĩa là nhập từ bàn phím đến khi nào gặp dấu nhắc kết thúc file. Dấu nhắc đó hình như là F3 hay F4 gì đó.
Mình thì ít khi sài cái này vì nó hơi bất tiện, nếu ai hay sài thì cho mình hỏi điểm tiện lợi luôn nha ^^
Ưu điểm là nó có thể nhập vào nhiều lần khi compile, còn nếu k EOF thì chỉ dùng dc 1 lần khi compile rồi tắt đi compile lại, bất tiện
Dạ em cảm ơn mọi người nhiều ạ