Cho mảng 1 chiều các số nguyên viết hàm tính tổng các số chẵn trong mảng bằng phương pháp de quy
Mọi người ơi e muốn hỏi về thuật toán đệ quy cũng như hướng giải với. Bài này hơi khoai
Điều kiện dừng là 0; khi gặp 0 return 0; Return n+tenham(n-2); Nếu n%2==0; Ví dụ n=6 Tông sẽ là: 6+4+2; Khi n%2!=0 thì có nghĩa n là số lẻ thì trả kq khác. Ví dụ số 5. Thì return (n-1)+tenham((n-1)-2); Vì là số lẻ nên lui 1 đơn vị sẽ ra số chẵn
n = 234252 Sum = 2 + 4 + 2 + 2 = 10 1 Like
bác hiểu nhầm ý e rồi, ý e là nếu số n có dạng xyz, nếu x hoặc z là số chẵn thì tính tổng x+z cơ bác ạ
bài trên suy nghĩ sai. int dequy(int n){ if (n<0) return -1; // dung khi n<0 int k=(n%10)%2; // so du chia het cho 2. if ((n/10)==0){ return n; // neu n chia 10 = 0 return 0. }else if (k==0){ // neu so du = 0. return n%10+ dequy(n/10); // vi du 20: 20%10 = 0 + 20/10 = 2 }else return dequy(n/10); //nguoc lai n/10 !=0 va so du != 0 vd: 201/10 = 20. 20/10 = 2. }3 Likes Home Categories FAQ/Guidelines Terms of Service Privacy Policy
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
đem NhapMang(a, (n-1)); xuống dưới bạ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ễn nói chung mình chưa hiểu bạn định làm gì
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á 1 Like
À 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 1 Like
Bạn đã làm chưa ? Đây cũng là 1 cách làm nè: int recursion(int* tab, int len, int acc); int main(void) { int tab[] = {1,2,3,4,5,-15}; printf("%d\n", recursion(tab, 6, 0)); return 0; } int recursion(int* tab, int len, int acc){ if (len < 0) return acc; else { int newAcc = acc + tab[--len]; return recursion(tab, len, newAcc); } }
cảm ơn bạn
void nhapmangdequy(int a[], int n) { if (n>0) { nhapmangdequi(a,n-1); printf("Nhap phan tu thu :%d",n-1); scanf("%d",&a[n-1]); } }
Bạn này thật sự hiểu đệ quy dấy bạn ạ , nếu như đem dequy xuống dưới như bạn khi nó chạy đế cuối cùng n=0(cái này debug rồi hiểu nhé) nó lần lượt trả về n=1 nhưng nếu như vậy thì nó đã in nhập mảng 9 rồi nhé :)) bạn học kĩ sẽ thấy đệ quy nó giống stack như thế nào
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, …) 1 Like
Có ai đó đang dùng IE thì phải… if(n = 1)Chỗ này đợi đệ quy đến mùa quýt à Đ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, … 1 Like
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
chú ý return về 0 nhé b :v
Hàm gọi lại chính nó được gọi là đệ quy. Hàm đề quy có 4 loại bao gồm:
Sau đây chúng ta cũng tìm hiểu những dạng bài nào được viết dạng đệ quy. 1. Hàm nhập, xuất mảng đệ quy
2. Hàm xuất mảng ngược Vd: Mảng a[5]={2, 4, 5, 3, 9} thì ta có mảng ngược là a[5]={9, 3, 5, 4, 2}
3. Tính tổng n Vd: n = 5 thì ta có S = 1 + 2 + 3 + 4 + 5
4. Đếm mảng các số chẵn Chú thích: Chúng ta sẽ đếm những số chẵn có trong mảng có bao nhiêu số.
5. Đếm mảng các số nguyên tố
6. Hàm tổng mảng
7. Hàm tổng mảng chẵn
8. Hàm tính tổng các giá trị lớn hơn giá trị đứng trước nó. Vd: 5, 6, 9, 1, 2 thì ta có S= 6 + 9 + 2 vì 5 < 6 ta lấy 6, 6 < 9 ta lấy 9…
9. Kiểm tra mảng toàn chẵn
10. Hàm tìm max trong mảng
11. Tìm vị trí max trong mảng
12. Hàm xếp tăng mảng
13. Giả xử x1=1, x2 =1, xn=x(n-1) + (n-1)*x(n-2) Viết hàm tính xn bằng đệ quy.
14. Tính số hạng n của dãy Fibonacci sau. f1=1 f2=1 fn=fn-1 + fn-2, n>=3
15. Tìm UCLN của 2 số nguyên dương
|