30/09/2018, 18:22
Cách chạy của hàm for trong chương trình này là như thế nào?
public static void duyet(int i) {
for (int j=0; j<4; j++) {
x[i]=a[j];
if(i==k-1)
check(x,k);
else duyet(i+1);
}
}
Bài liên quan
Mình thấy mỗi đệ quy, hàm duyet() có sử dụng lời gọi hàm tới chính nó.
Bạn nên đưa code cũng như đề bài thì mọi người mới giải thích được chứ.
mình mới học java nên bạn xem r giải thích giúp mình cái nhưng mình k hiểu chính là cái đệ quy đó bạn
bài toán cho 4 số 0 1 2 5 lập số có k số có tổng bằng N
Trích một cách giải thích tìm thấy trên mạng chứ mình cũng k biết nói sao nữa :
Một hàm được gọi là đệ quy nếu bên trong thân nó có một lời gọi đến chính nó. Trong thực tế, một hàm đệ quy luôn có điều kiện dừng được gọi là “điểm neo”. Khi đạt tới điểm neo, hàm sẽ không gọi chính nó nữa.
Khi được gọi, hàm đệ quy thường được truyền cho một tham số, thường là kích thước của bài toán lớn ban đầu. Sau mỗi lời gọi đệ quy, tham số sẽ nhỏ dần, nhằm phản ánh bài toán đã nhỏ hơn và đơn giản hơn. Khi tham số đạt tới một giá trị cực tiểu (tại điểm neo), hàm sẽ chấm dứt.
Bạn có thể google để tìm hiểu về đệ quy, làm một só bài tập như tính giai thừa, số fibonaci… để hiểu rõ hơn.
cái đó mình cx đã tìm hiểu nhưng mình đang thắc mắc cách chạy của vòng for.
lúc đầu i=0 ->vòng for thì x[0]=a[0] lệnh if kiểm tra i==k-1 k cái thì gọi lại hàm nhưng với i=1;
mình nghĩ thì hàm này chạy cứ sinh ra x[0]=a[0],x[1]=a[0],…x[k-1]=a[0] à??
Hàm đệ quy này còn ở trong for nữa mà bạn. Mở đầu hàm duyet(i) phải chạy 4 lần j (j = 0 -> j < 4), nếu không thoả mãn điều kiện, sẽ đệ quy hàm duyet(i+1) và lại chạy lại 4 lần j … cứ như thế tới khi nào i == k - 1. Để hiểu được giải thuật này mình nghĩ khá là khó, thôi thì ng.ta làm như thế thì mình cũng biết thế vậy.
X.lỗi vì không giúp được gì nhiều.
mình cảm ơn…mình cx vừa hiểu ra vấn đề
cái này ứng dụng của thuật toán đệ quy , mình thấy khá giống backtrack bạn thử tìm hiểu xem
Mình học toán rời rạc về thuật toán quay lui có dùng đệ quy kết hợp với for. Tuỳ từng bài tập thì thay đổi tham số truyền vào để giải chứ để hiểu kĩ thì cũng khá là khó.
Có a.chị nào đã đi làm cho e hỏi là sau này lập trình có l.quan tới đệ quy phức tạp k ạ ?
Không sử dụng nhiều đệ quy đâu, trừ phi không có giải pháp khác hoặc đệ quy với số lần lặp nhỏ thì mới dùng. Vì đệ quy có nguy cơ overflow.