Làm thế nào để thiết lập một variable cho nested vòng?


0 Phiếu
Đã hỏi 25/5/2016 bởi Fha_kida (440 điểm)
Tôi muốn viết một function mà chấp nhận như là input số lượng các vòng lặp nested function sẽ thực hiện. Ví dụ: Nếu tham số input là 3, function sẽ thực hiện 3 nested vòng như sau:
for i=0:[any]
 for j=0:[any]
  for k=0:[any]
và nếu tham số input là 2, nó sẽ là như thế này:
for i=0:[any]
 for j=0:[any]
làm thế nào có thể thực hiện algorithm này?

3 Câu trả lời

0 Phiếu
Đã trả lời 04/6/2016 bởi Hfr_5857 (760 điểm)
Bạn có thể "đóng gói" vòng tất cả vào một vòng lặp đơn. code sau đây giả định rằng
    giới hạn của tất cả các vòng lặp là như nhau;
  • bạn chỉ muốn làm công cụ trong các vòng lặp trong cùng.
Matlab code:
N = 3; %// number of loops
M = 10; %// range for each variable is from 0 to M-1
for generalCounter = 0:M^N-1
   counters = dec2base(generalCounter,M,N)-'0';
   %// Now you are at the innermost "loop". counters(1) is your "i",
   %// counters(2) is your "j" etc
end
quan trọng là sử dụng một counter chung và từ đó tính toán công tơ i, j vv. Điều này được thực hiện trong Matlab với dec2base(...)-'0'. Phần -'0' là cần thiết bởi vì dec2base trả về một mảng char , do đó, -'0' chuyển đổi char mỗi số của nó đại diện. Các ngôn ngữ khác nó có thể được thực hiện một cách khác nhau, nhưng bạn sẽ có được ý tưởng.
0 Phiếu
Đã trả lời 04/6/2016 bởi Fni_9092_Be (920 điểm)
Bạn đã gắn thẻ câu hỏi của bạn với Mathlab và c + +. Mà một trong những bạn cần? Đây là trong C++. Nếu tôi hiểu câu hỏi của bạn một cách chính xác (n vòng với giới hạn m), sau đó bạn cần một cái gì đó như:
void func(int countLoops, int loopUpperLimit) {
    // simpler code with 2 loops
    while (countLoops-- > 0) {
        for (int i = 0; i < loopUpperLimit; i++) {
            // do something
        }
    }
    // shorter code with one loop
    for (int i = 0, limit = loopUpperLimit * countLoops; i < limit; i++) {
        // do something
    }
}
code trên giả định bạn không cần các yếu tố cá nhân control (i, j, k và do đó trên).
Đã bình luận 06/6/2016 bởi FraMake (890 điểm)
Đây có phải là bài tập ở nhà? Bạn đã cố gắng bất cứ điều gì?
0 Phiếu
Đã trả lời 04/6/2016 bởi grz3428 (160 điểm)
Bạn đã gắn thẻ câu hỏi của bạn với Mathlab và c + +. Mà một trong những bạn cần? Đây là trong C++. Nếu tôi hiểu câu hỏi của bạn một cách chính xác (n vòng với giới hạn m), sau đó bạn cần một cái gì đó như:
void func(int countLoops, int loopUpperLimit) {
    // simpler code with 2 loops
    while (countLoops-- > 0) {
        for (int i = 0; i < loopUpperLimit; i++) {
            // do something
        }
    }
    // shorter code with one loop
    for (int i = 0, limit = loopUpperLimit * countLoops; i < limit; i++) {
        // do something
    }
}
code trên giả định bạn không cần các yếu tố cá nhân control (i, j, k và do đó trên).
Đã bình luận 05/6/2016 bởi Ncc_Here (100 điểm)
ý tưởng này có thể được thực hiện bằng cách sử dụng đệ quy. bạn không thể làm điều này bằng cách chỉ sử dụng vòng lặp.

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...