import static java.lang.System.out;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Fibonachi {
/**
* @param args the command line arguments
*/
public static void main(String args[])throws IOException {
out.println("Enter number");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
Integer num = Integer.parseInt(str);
Integer fib=0;
if(num == 1) {
fib = 1;
out.println(fib);
}else if(num <= 0){
out.println("Только натуральные числа");
}else{
for(int i=0, j=1, k=0; i<=num; i++)
{
fib=j+k;
j=k;
k=fib;
}
out.println(fib);
}
}
}
Рекурсия
Последовательность фибоначи: Есть 2 кролика каждый месяц они приводят еще одну пару кроликов, новая пара кроликов начинает через 2 месяца приводить каждый месяц пару кроликов.Кролики не умирают и приводят постоянно в этом режиме.Вопрос сколько будет кроликов через n месяцев?
Вот так я решил через итерацию
Код:
а теперь пробую рекурсивно
вот так:
Код:
public void fibRec (Integer num) {
Integer fib = num * (fibRec(num));
}
Integer fib = num * (fibRec(num));
}
или вот так:
Код:
public void fibRec (Integer num) {
Integer fib = num * (this.fibRec(num));
}
Integer fib = num * (this.fibRec(num));
}
все равно ошибка:
The operator * is undefined for the argument type(s) Integer, void
К слову в пхп это будет так
Код:
/**
* @param Только натуральное число
* @return Возврощает последовательность Фибоначи
*/
function fibRec($n)
{
if($n == 0|| $n ==1)
{
return 1;
}
elseif($n <=0)
{
echo "Только натуральное число";
}
else
{
$m = fibRec($n-2)+fibRec($n-1);
return $m ;
}
}
/**
* @param Только натуральное число
* @return Возврощает последовательность Фибоначи
*/
function fibIter($n)
{
for($i=0, $j=1, $k=0, $fib=0; $i<=$n; $i++)
{
$fib=$j+$k;
$j=$k;
$k=$fib;
}
echo $fib;
}
* @param Только натуральное число
* @return Возврощает последовательность Фибоначи
*/
function fibRec($n)
{
if($n == 0|| $n ==1)
{
return 1;
}
elseif($n <=0)
{
echo "Только натуральное число";
}
else
{
$m = fibRec($n-2)+fibRec($n-1);
return $m ;
}
}
/**
* @param Только натуральное число
* @return Возврощает последовательность Фибоначи
*/
function fibIter($n)
{
for($i=0, $j=1, $k=0, $fib=0; $i<=$n; $i++)
{
$fib=$j+$k;
$j=$k;
$k=$fib;
}
echo $fib;
}
Жду подсказку и критику .
Цитата: rafaelkyrdan
Жду подсказку и критику .
1. Очевидно, что функция, которая должна чего-то возвращать, не должна быть объявлена как void. :) Я про вашу функцию fibRec.
2. У вас же уже на PHP все написано.
Код:
public int fibRec(int n) {
return ((n == 0) || (n == 1)) ? 1 : fibRec(n-1) + fibRec(n-2);
}
return ((n == 0) || (n == 1)) ? 1 : fibRec(n-1) + fibRec(n-2);
}
3. Не знаю, может, для учебных целей оно и хорошо, но в реальной жизни не рекомендуется реализовывать Фибоначчи через рекурсию. Там же стек очень быстро заполняется, за счет двойного вызова.
ok спасибо +1