2014-10-05 2 views
0
n = 10 
10+9+8+7+6+5+4+3+2+1 = 55 

вот кусок кода для добавления числа, начиная с n, до каждого числа перед ним.нужна помощь для понимания рекурсии

public static int recursion(int index){ 
    if (index == 0){ 
     return 0; 
    } 
    else{ 
     return recursion(index-1) + index; 
    } 
} 

извините за глупый вопрос, но вот то, что запутать меня: когда индекс не равен нулю, то вызывает функцию рекурсии снова с индексом вычитают 1, так далее до тех пор, пока индекс не равен нулю. Тем не менее, это кодированная рекурсия (индекс-1) + индекс.

так почему индекс не вычитается 1 и не добавляется 10 (или любым номером индекса) каждый раз, когда вызывается функция? почему это не так: (10+ (9 + 10) + (8 + 10) + (7 + 10) + ....)?

+0

'index' - локальная переменная для функции' recursion', поэтому она всегда имеет значение, которое вы передали в начале текущей рекурсии (рекурсивный вызов). Это не «рекурсия (индекс-1)», которая фактически способствует окончательному результату; это часть '+ index' (которая продолжает декрементировать от 10 до 0 при продолжении вызова функции). В конечном счете это сводится к (((((((((0 + 1) +2) +3) +4) +5) +6) +7) +8) +9) +10). (Правильно ли я скопировал скобки?;)) –

ответ

3

Попытка написать эту сумму в качестве

sum(10) = 1+2+3+4+5+6+7+8+9+10 

Это позволит вам увидеть, что

sum(10) = (1+2+3+4+5+6+7+8+9)+10 = sum(9)+10 

и

sum(9) = (1+2+3+4+5+6+7+8)+9 

и так далее

Другими словами

sum(i) = sum(i-1) + i; 

или быть более точным

  {0   for i=0 
sum(i) = { 
     {sum(i-1) + i for i>0 

Кстати каждый метод времени называется его переменные являются отдельными экземплярами в каждом вызове метода, что означает index в recursion(10) является отдельной переменной, чем index в recursion(9).

+0

, что очищает вещи :) спасибо – Rei

2

Оцените это вручную. Начните с index = 10:

индекс не равен нулю, поэтому мы идем в else:

return recursion(10 - 1) + 10 

return recursion(9) + 10 

Теперь recursion(9) вычисляет

return recursion(9 - 1) + 9 

return recursion(8) + 9 

Итак, подставляя в выше:

return recursion(8) + 9 + 10 

Итак, продолжая процесс

return recursion(0) + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 

И мы знаем, что recursion(0) возвращается 0 так рекурсия останавливается в этой точке.

+0

это довольно четкое объяснение. спасибо: D – Rei

0
recursion(index-1) + index; 

Для этого заявления intiallty будет

recursion(10-1) + index; 

для оценки, что 10-1 будет сделано то есть. 9 Затем для того, чтобы найти ans этого оператора recursion(9), необходимо найти функцию recursion. так выражение становится

recursion(9) + 10; 

И рекурсии (9) Виль

recursion(9-1) + 9 

Это продолжается, и, наконец, он будет recursion(0), который возвращает 0.

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