30/09/2018, 20:04

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 :))

Lâm Phúc Tài viết 22:16 ngày 30/09/2018

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 ^^

PhởCode viết 22:16 ngày 30/09/2018

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.

Sáng Béo viết 22:18 ngày 30/09/2018

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à

Người bí ẩn viết 22:13 ngày 30/09/2018

Hehe, mình bất cẩn quá

Người bí ẩn viết 22:11 ngày 30/09/2018

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!

Mu Hoasua viết 22:18 ngày 30/09/2018

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:

#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\n", 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 :))
[/quote]

Lâm Phúc Tài viết 22:17 ngày 30/09/2018

(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 ^^

Người bí ẩn viết 22:18 ngày 30/09/2018

Ư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

Mu Hoasua viết 22:15 ngày 30/09/2018

Dạ em cảm ơn mọi người nhiều ạ

Bài liên quan
0