tại sao kq in ra là 0101 ạ
#include <stdio.h>
void func(int a, int b)
{
if (a != 0)
{
func(a / b, b);
printf("%d", a%b);
}
else printf("%d", 0);
}
int main() {
func(50, 7);
getch();
}
tại sao kq in ra là 0101 ạ
#include <stdio.h>
void func(int a, int b)
{
if (a != 0)
{
func(a / b, b);
printf("%d", a%b);
}
else printf("%d", 0);
}
int main() {
func(50, 7);
getch();
}
Bạn muốn nó in ra 1010 phải không?
Vì hàm printf() nằm sau hàm func().
Thử đổi chỗ cho printf() đứng trước func() xem kết quả thế nào.
Bạn nên học cách chạy Gỡ lỗi (Debug). Rất hữu ích cho bạn sau này.
Trình tự đệ quy theo đoạn mã trên:
func(50, 7){
50!=0 => func(7,7){ // 50/7 = 7. Chạy khối trong if
7!=0 => func(1,7){ // 7/7 =1. Chạy khối trong if
1!=0 => func(0,7){ // 1/7 = 0. Chạy khối trong if
0!=0 => print 0 // Chạy khối trong else. Số thứ nhất là 0
}
print 1 // a = 1, b = 7 => 1%7 = 1. Số thứ 2 là 1
}
print 0 // a = 7, b = 7 => 7%7 = 0. Số thứ 3 là 0
}
print 1 // a = 50, b = 7=> 50%7 = 1. Số thứ 4 là 1
}
oh thì ra là vậy , cảm ơn bạn nhiều
Hiểu nôm na là, nhưng câu lệnh sau lệnh gọi đệ quy luôn được lưu vào stack để gọi lại sau đó, khi giải quyết bài toán neo, nó quay lại tính giá trị của bài toán trước đó.
Tư tương giống như mình tính giải thừa vậy.
Ban đâu, mình không thể tính a! được mà phải thông qua (a-1)!, neo là khi a = 0, 0! = 1.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?