Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рекурсия

23K
06 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
Подскажите пожалуста как вызывать рекурсивно метод в джаве.

Последовательность фибоначи: Есть 2 кролика каждый месяц они приводят еще одну пару кроликов, новая пара кроликов начинает через 2 месяца приводить каждый месяц пару кроликов.Кролики не умирают и приводят постоянно в этом режиме.Вопрос сколько будет кроликов через n месяцев?

Вот так я решил через итерацию
Код:
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);
           
        }
           
    }

}


а теперь пробую рекурсивно
вот так:

 
Код:
public void fibRec (Integer num) {
        Integer fib = num * (fibRec(num));
    }


или вот так:

 
Код:
public void fibRec (Integer 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;
   
}


Жду подсказку и критику .
278
07 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: rafaelkyrdan

Жду подсказку и критику .



1. Очевидно, что функция, которая должна чего-то возвращать, не должна быть объявлена как void. :) Я про вашу функцию fibRec.
2. У вас же уже на PHP все написано.

 
Код:
public int fibRec(int n) {
   return ((n == 0) || (n == 1)) ? 1 : fibRec(n-1) + fibRec(n-2);
}

3. Не знаю, может, для учебных целей оно и хорошо, но в реальной жизни не рекомендуется реализовывать Фибоначчи через рекурсию. Там же стек очень быстро заполняется, за счет двойного вызова.
23K
07 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
ok спасибо +1
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог