30/09/2018, 21:05
Hàm tính tổng các phần tử trong mảng nguyên bằng đệ quy
Em đang viết hàm tính tổng các phần tử trong mảng nguyên bằng đệ quy nhưng lại bị lỗi mà e ko biết sửa ntn. mong mọi người thông giúp em với
#include <stdio.h>
#include <stdlib.h>
void NhapMang(int a[], int n)
{
if(n > 0)
{
NhapMang(a, (n-1));
printf("Nhap phan tu thu %d: ",n);
scanf("%d", &a[n-1]);
}
}
int TongCacPhanTu(int a[], int n)
{
if(n = 1)
{
return TongCacPhanTu(a, n);
printf("%d", n);
}
return TongCacPhanTu(a, (n-1)+n);
printf("%d", (n-1)+n);
}
void main()
{
int a[100], n;
printf("Nhap so phan tu cua mang: ");
scanf("%d", &n);
NhapMang(a,n);
TongCacPhanTu(a, n);
printf("Tong cac phan tu trong mang la: %d
", TongCacPhanTu(a,n));
system("pause");
}
Bài liên quan
đem
NhapMang(a, (n-1));
xuống dướibạn chưa scanf mà đã call hàm rồi
còn sai nhiều lắm, chỗ
if(n=1)
sẽ đệ quy vĩnh viễnnói chung mình chưa hiểu bạn định làm gì
à tại mình nghỉ là nếu n = 1 thì mảng có 1 chữ số nên trả về mảng luôn. Vậy là sai rồi
Tổng các phần tử trong mảng nguyên th dùng vòng lặp ok rồi, cần gì recursion?
This post was flagged by the community and is temporarily hidden.
dùng vòng lặp thì dễ quá nhưng mà thầy đang cho bài tập bắt xài đệ quy
À Thế thì cứ làm nhé
Nhưng sau này, bạn sẽ hiểu là nên giải 1 bài toán bằng cách ngắn gọn nhất. Đệ quy hình như có làm tốn bộ nhớ hơn ấy
ừ bạn thầy cũng nói là bí lắm thì mới xài đệ quy hoặc là bị bắt ép xài thì mới xài . còn ko thì không nên xài. dù sao cũng cảm ơn bạn
Bạn đã làm chưa ? Đây cũng là 1 cách làm nè:
cảm ơn bạn mình sẽ lưu lại cách này để tham khảo. Sáng thầy mới sửa
Bây giờ thì phải lần từ từ để hiểu (stack trace, chạy tay: lệnh phải chạy từ 1, 2, 3, …) để sau này hiểu đại thể, nhưng vẫn phải debug
Có ai đó đang dùng IE thì phải…
Chỗ này đợi đệ quy đến mùa quýt à n=1 thì kết thúc mọi thứ luôn rồi.
Đem đệ quy xuống dưới hay lên trên cũng như nhau cả thôi, chỉ là đem xuống dưới thì thuận mắt và dễ debug hơn thôi.
Không hẳn, đệ quy đuôi sẽ ra 9, 8, 7, 6, 5, … còn muốn 1, 2, 3, … thì viết như thớt.
Bạn truyền size mảng vào rồi trừ nó đi, nhỏ hơn 0 thì dừng… cách đó thử xem :v