2015-05-31 3 views
2

Это очень простой вопрос, но по какой-то причине я запутался, и это раздражает.Выполнение вложенного цикла

def test(): 
for i from Lo1 to Hi1: 
    for j from Lo2 to Hi2: 
    body() 

Сколько раз тело() выполнить для: Lo1 = 1, Hi1 = п, lo2 = я-2, Hi2 = я + 2

Ответ 5n раз, но у меня не знаю, как они это получают!

+1

Сколько раз вы думаете, он будет выполнять? Во-первых, сколько раз выполняется цикл j? –

ответ

1

Я думаю, что самый простой способ понять это, чтобы запустить его.

Например, для n=10, значения Следующий код ява отпечатки i и j в каждой итерации:

for (int i=0; i<=10; i++){ 
    for (int j=i-2; j<=i+2; j++) 
     System.out.println("i = " + i + ", j= " + j); 
} 

Результат выглядит следующим образом:

i = 0, j= -2 
i = 0, j= -1 
i = 0, j= 0 
i = 0, j= 1 
i = 0, j= 2 
i = 1, j= -1 
i = 1, j= 0 
i = 1, j= 1 
i = 1, j= 2 
i = 1, j= 3 
i = 2, j= 0 
i = 2, j= 1 
i = 2, j= 2 
i = 2, j= 3 
i = 2, j= 4 
i = 3, j= 1 
i = 3, j= 2 
i = 3, j= 3 
i = 3, j= 4 
i = 3, j= 5 
i = 4, j= 2 
i = 4, j= 3 
i = 4, j= 4 
i = 4, j= 5 
i = 4, j= 6 
i = 5, j= 3 
i = 5, j= 4 
i = 5, j= 5 
i = 5, j= 6 
i = 5, j= 7 
i = 6, j= 4 
i = 6, j= 5 
i = 6, j= 6 
i = 6, j= 7 
i = 6, j= 8 
i = 7, j= 5 
i = 7, j= 6 
i = 7, j= 7 
i = 7, j= 8 
i = 7, j= 9 
i = 8, j= 6 
i = 8, j= 7 
i = 8, j= 8 
i = 8, j= 9 
i = 8, j= 10 
i = 9, j= 7 
i = 9, j= 8 
i = 9, j= 9 
i = 9, j= 10 
i = 9, j= 11 
i = 10, j= 8 
i = 10, j= 9 
i = 10, j= 10 
i = 10, j= 11 
i = 10, j= 12 

Вы можете видеть теперь, что есть 10 итераций для i, и для каждого i у вас есть 5 итерации j(from i-2 to i+2). Следовательно, всего 50 (5*N) итераций.

+1

Это потрясающе, и вы правы. Это очень просто после реализации алгоритма. Теперь я вижу, что происходит Я бы поднял ваш ответ, но я не могу = ( – Shotokan

3

lo2 = я-2, Hi2 = I + 2 Внутренний контур

Так (I-2) до (I + 2) = 5 чередований EG: i-2 , i-1 , i , i+1 , i+2

Like (-2) к (+ 2) = - 2, -1,0,1,2

Lo1 = 1, Hi1 = п по внешнему контуру

1 до N

Так ВсегоInner* Outer

5 * N = 5N

+0

ТАК ПРОСТО! Мне очень нравится этот шаг изменения, это действительно делает вещи ясными. СПАСИБО БОЛЬШОЕ! Я бы отметил его правильным ответом/повышением, но мне не хватает репутации :( – Shotokan

1

Пусть существует цикл с Java кодом

for(int i=3;i<=6;i++) 
{ 
    //Statements to be executed 
} 

Цикл будет выполнять 4 раза (я = 3,4,5,6)

Как рассчитать?

формула = верхняя граница-нижняя граница + 1

так что в приведенном выше цикле будет 6-3 + 1 = 4 (верхняя граница = 6, нижняя граница = 3)

В своем вопросе верхняя граница = I + 2

нижняя граница = я-2

общее количество раз внутренний цикл выполняют = I + 2- (2-я) + 1 = I + 2-я + 2 + 1 = 5

внешний контур будет Execute п раз так просто умножить на п

, следовательно, ответ становится 5 * п = 5n

+0

Wow, еще один действительно хороший способ взглянуть на него. Эта формула очень очевидна, когда вы объяснили мне это. Спасибо – Shotokan

+0

Если вы удовлетворены, то вы должны отметить любой из этих ответов был принят. – aa1992

+0

Я не мог до этого момента, @ aa1992 У меня не было достаточного уважения. – Shotokan

Смежные вопросы