2014-01-19 3 views
0

Мне дано это на макетном экзамене по программированию, и я не слишком хорош в этом вопросе, может кто-нибудь объяснить мне, как я буду проходить через что-то как следующее? измените значения на один в вопросе, если вам кажется, что это объясняет это лучше. Это последнее, что действительно меня отталкивает. Спасибо вам за помощь.Может ли кто-то проследить меня через это, используя значения (1,1)

public int function(int a, int b) 
{ 
    if (a<=0){ 
     return b; 
    } 
    else if (b<=0) 
    { 
     return function(a-2, 0); 
    } 
    else 
    { 
     return function (function (a-1, b-1), b-1); 

    } 
+1

Возьмем малых значений ('а = 2, B = 2'), например, и попытаться увидеть, какие звонки сделаны и как работает метод. Делать это на бумаге было бы легче увидеть, чем смотреть на экран. –

+5

Трассировка рекурсивных методов может быть сложной задачей, поэтому важно следить за тем, что происходит в памяти на бумаге шаг за шагом. Начните с небольших значений и начните свой путь вверх. Проверьте свою работу, запустив программу. – Deena

+0

Извините, у меня нет терпения, чтобы выписать то, что вы просите здесь, но я предлагаю вам будет очень полезно запустить его в отладчике Eclipse (или Netbeans или что-то еще) поэтапно и убедитесь сами. –

ответ

1

Хорошо, я пройду через другие ценности, чтобы вы могли научиться делать это самостоятельно.

позволяет принимать значения 2,2, например.

проверка первый, если заявление (if (a<=0)), чтобы увидеть, если его действительным

a=2 так заменить a со значением 2

является 2 <= 0? Неа. Давайте перейдем к следующему ведомости

else if (b<=0) ПРИМЕЧАНИЕ: else if по существу является выражением, которое оно использовало, если предыдущий оператор if не работает.

b = 2 является 2<=0? Неа. НА СЛЕДУЮЩИЙ!

else обрабатывает все, что терпит неудачу при первой if и все исходящее else ifs

Так просто заткнуть в значениях.

a = 2 b = 2 
return function (function (a-1, b-1), b-1); 

->

return function (function (2-1, 2-1), 2-1); 
-> return function (function (1, 1), 1); 

Вы можете пойти двумя путями с этим держать повторяющиеся вниз или логически думать об этом.

Теперь ... позволяет начать замечать шаблон здесь и искать базовый регистр (обычно используемый для рекурсивных функций, подобных этим), поэтому вы замечаете return b в первом операторе if ВСЕГДА будет фактическим возвращаемым результатом в конце и всем другой повторяющийся будет вытекать из этого результата, потому что это единственное реальное значение, которое вы вернетесь. Теперь у нас это установлено Как мы можем дойти до этого значения? если заявление a<=0 - единственный способ добраться туда. Вы начинаете замечать отношения.


вход a <= b или a <= 0 выхода b

вход a > 0a > b выхода 0

2

интерпретировать ваши (1,1), как a = 1 и b = 1. Это говорит:

a = 1 > 0, то введите условие ложно, поэтому первая ветвь не принимается:

if (a<=0) 

Мы не идти до второй ветви. b = 1 > 0 ввода условие ложно снова, поэтому мы не будем принимать эту отрасль ни:

else if (b<=0) 

в конце концов, мы достигаем else ветку и мы принимаем его:

else 

Так мы попадаем в этой строке :

return function (function (a-1, b-1), b-1); 

Существует рекурсия, здесь! Первый звонок function (a-1, b-1), поэтому мы звоним function с a = 1 - 1 = 0 и b = 1 - 1 = 0. Давайте начнем снова, как описано выше:

a = 0, поэтому мы берем первую ветвь:

if (a <= 0) 

и мы возвращаемся b = 0.

Теперь пришло время второй рекурсии. У нас есть a = function(a - 1, b - 1) = 0 и b = 1 - 1 = 0. Это все еще a = 0 и b = 0, поэтому результат будет 0, как указано выше.

И наконец, мы возвращаем 0.

+0

Помните, что 'a' и' b' из каждого из трех вызовов - это другая переменная. Если вам это не ясно, я переименую переменные. –

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

  • Нет связанных вопросов^_^