Код 1:
public static int fibonacci (int n){
if (n == 0 || n == 1) {
return 1;
} else {
return fibonacci (n-1) + fibonacci (n-2);
}
}
Как вы можете использовать fibonacci
, если вы еще не закончили объяснять, что это такое? Я мог понять, используя рекурсию в других случаях:
Код 2:
class two
{
public static void two (int n)
{
if (n>0)
{
System.out.println (n) ;
two (n-1) ;
}
else
{
return ;
}
}
public static void main (String[] arg)
{
two (12) ;
}
}
В случае кода 2, однако, n
в конечном итоге достигнет точки, в которой она не удовлетворяет n>0
, и метод перестанет называть себя рекурсивно. В случае кода 2, однако, я не вижу, как он сможет получить себя от 1, если n=1
был отправной точкой для 2 и 3 и 5 и так далее. Кроме того, я не вижу, как работает строка return fibonacci (n-1) + fibonacci (n-2)
, поскольку fibonacci (n-2)
должна содержать в некотором смысле fibonacci (n-1)
для работы, но ее пока нет.
Книга, на которую я смотрю, говорит, что она сработает. Как это работает?