2014-01-14 4 views
0

Я новичок в рекурсии и мой учитель дал нам этот код, чтобы изучить:Нужна помощь в анализе этой рекурсии кода

public long rudolph(long a, long b){ 
if(b==0) 
    return a; 
else 
    return rudolph(b, a % b); 
} 

Я пытался следовать логике, используя различные значения для а и б каждый раз, но я не может понять смысл результатов. Как понять это без его запуска? В основном пытается выяснить, что делает этот код в целом.

пример:

if a = 9 and b = 7: 
return rudolph(7,2); 
return rudolph(2,1); 
return rudolph(1,0); 
return 1 

if a = 10 and b = 5: 
return rudolph(5,0); 
return 5 

if a = 5 and b = 2: 
return rudolph(2,1); 
return rudolph(1,0); 
return 1 
+0

Покажите нам, какие ценности вы вычислен –

+3

Последний пример не является правильным. – Henry

+1

http://en.wikipedia.org/wiki/Euclidean_algorithm – Pshemo

ответ

1

Лучше всего, чтобы получить кусок бумаги и карандаш и рекордных значений для а и Ь при каждом вызове. Начните с small (er) (например, a = 2, b = 3), чтобы увидеть, где и как остановлена ​​рекурсия, а затем вы можете оттуда продвигаться оттуда.

EDIT: Покажите нам, что вы пробовали, и мы можем попытаться указать вас в правильном направлении, если вы действительно не можете понять это (есть разница между ленивым и действительно не понимающим).

+0

Спасибо за ответ, я добавил свои попытки. – user3195991

+0

@ user3195991 Вы сделали ошибку на рудольфе (5,2). 5% 2 = 1, а не 2. –

+0

@ user3195991, поэтому все приведенные вами примеры верны. Вы видите, что означают последние значения? –

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