Lỗi đệ quy C/C++


mình nhập a=3 vs b=2 nó trả ra là 5
chạy debug ko hiểu tại sao tới lúc return kq=8 nó lại chạy lại kq=dequycong(a,b,kq) trong vòng if với a=2 ,b=1 vs kq=5
rồi cho mình kết quả = 5 ai có thể giúp mình chỉ ra lỗi ko?

kq+=a+b bạn có thừa dấu + không vậy ^^

kq+=a+b
nó là kq=kq+a+b
thôi bạn ah

Không có chuyện đó nhé.

Dòng đó và 2 dòng a=--a, b=--b đều không có ý nghĩa . Chúng đều bị hiệu ứng lề (side effect) và không cho kết quả xác định (undefined behavior)

1 Like

@BetapCode bạn có thể nói rỏ hơn ko?

Chẳng hạn với dòng a=--a thì không thể xác định được compiler sẽ làm gì, chẳng hạn:

--a;
a=a;

hay

a=a;
--a;

hay chẳng làm gì cả…

Nói chung theo standard C thì cách viết như trên dẫn đến UB (Undefined Behavior) và nếu đã là UB thì không có gì phải bàn cả vì mình hoàn toàn không biết chuyện gì sẽ xảy ra.

1 Like

a=–a;
là a-1 rồi gán cho a bạn ơi!
@BetapCode có mail ko tui gửi cho file bạn chạy debug rồi nói cho mình hiểu mình bó tay ko hiểu tại sao rùi!

nếu muốn gán a = a - 1; thì bạn ghi là --a; là đủ rồi, ko cần phải ghi a = --a;

Tất cả những cái này:

a=--a;

a=++a;

a=a--;

a=a++ 

đều không có ý nghĩa.

Bạn tìm hiểu thêm nhé.

mà hàm dequycong này để làm gì?

code trên của bạn thì câu lệnh if chả có nghĩa gì cả. a = --a hay b = --b cũng vô nghĩa. Chỉ có 2 dòng có nghĩa là kq += a + b;return kq;

tui muốn làm đệ quy cho vui

@BetapCode vậy bạn sữa dùm tui đoạn code này đi
dùng đệ quy nha!:slight_smile:

Mình mới học code thôi, còn gà lắm, không giúp được đâu. Bạn tự suy nghĩ làm rồi có gì thắc mắc cứ hỏi lại mọi người sẽ giúp giải quyết nhé. Như vậy nhanh lên tay hơn với lại tự làm mới vui chứ ^^

1 Like

Éo mình bít lỗi rùi :unamused: ko hiểu về đệ quy mà làm đệ quy :sweat_smile:

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