30/09/2018, 20:29

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?

Bé tập Code viết 22:44 ngày 30/09/2018

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

nghia viết 22:33 ngày 30/09/2018

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

Bé tập Code viết 22:43 ngày 30/09/2018

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)

nghia viết 22:29 ngày 30/09/2018

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

Bé tập Code viết 22:32 ngày 30/09/2018

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.

nghia viết 22:44 ngày 30/09/2018

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!

viết 22:44 ngày 30/09/2018

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;

Bé tập Code viết 22:45 ngày 30/09/2018

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é.

viết 22:29 ngày 30/09/2018

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;

nghia viết 22:33 ngày 30/09/2018

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

nghia viết 22:39 ngày 30/09/2018

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

Bé tập Code viết 22:35 ngày 30/09/2018

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

nghia viết 22:43 ngày 30/09/2018

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

Bài liên quan
0