Giải thích bài toán

Mọi người có thể giải thích bài này giúp em được không ạ em tính tay ra = 3 nhưng chạy máy thì ra =5

#include <stdio.h>
int a =0;
int b=0;
int F(int n)
{
    if (n<=2)
    {
        a = 1;
    }
    else
    {
       
        a = F(n-2) +F(n-1);
        
    }
}
int main() {
   int i =F(4);
   printf("\ni = %d",i);
   
}
1 Like

Sửa cái condition n<=2 thành n<2 là được.

Ồ, có thể là may mắn, cũng có thể do C/C++ quá dễ dãi.
Hàm có kiểu trả về (int) nhưng không hề thấy lệnh return mà vẫn biên dịch và chạy ngon lành. Ngay cả khi bạn khai báo 2 biến ab nhưng cũng chả dùng đến mà cũng có số để mà in ra.

3 Likes

chắc bạn ý định đặt b cho phần F mà quên lại ghi a nên int b không cần thiết
Nếu mà trong hàm main không có câu lệnh return thì máy nó sẽ mặc định là return 0 (không phải máy dễ tính đâu, mình toàn quên lệnh return 0 =))) )

For x86 at least, the return value of this function should be in eax register. Anything that was there will be considered to be the return value by the caller.
Because eax is used as return register, it is often used as “scratch” register by callee, because it does not need to be preserved. This means that it’s very possible that it will be used as any of local variables. Because both of them are equal at the end, it’s more probable that the correct value will be left in eax

Link: c - Function returns value without return statement - Stack Overflow

Có khá nhiều câu trả lời có nội dung tương tự như trên.

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