Форум программистов, компьютерный форум CyberForum.ru

Функция чисел Фибоначчи, предшествующих вводимому числу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
11.03.2012, 18:27     Функция чисел Фибоначчи, предшествующих вводимому числу #1
С помощью рекурсивной функции вычислить и вывести числа Фибоначчи, предшествующие вводимому числу
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 18:27     Функция чисел Фибоначчи, предшествующих вводимому числу
Посмотрите здесь:

C++ Функция, которая для заданного целого числа m находит среди первых m^2-1 чисел Фибоначчи хотя бы одно, делящееся на m (перевести на Си)
По вводимому числу от 1 до 11 (номеру класса) выдать соответствующее сообщение C++
C++ Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду Фибоначчи
как в си ++ придать макс и мин значения вводимому числу C++
Установить порядковый номер дня в году по вводимому числу и месяцу (Переписать со структурой) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
11.03.2012, 18:30     Функция чисел Фибоначчи, предшествующих вводимому числу #2
C++
1
2
3
4
5
6
7
8
9
void find_fib(int a, int b, int x)
{
    if (b >= x)
        return;
    cout << b << ' ';
    find_fib(b, a + b, x);
}
 
find_fib(0, 1, x);
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.03.2012, 18:30     Функция чисел Фибоначчи, предшествующих вводимому числу #3
вот здесь:
Рекурсия в нахождении числа ряда Фибоначчи.
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 19:07     Функция чисел Фибоначчи, предшествующих вводимому числу #4
jeka061288, я постарался одновременно показать как решать данную задачу с циклом и рекурсией
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
 
int direct_fibo(int val)
{
    int fib1 = 1;
    int fib2 = 1;
    
    int fib_sum = fib2 + fib1;
    while(fib_sum <= val)
    {
        printf("%d ",fib1);
        fib_sum = fib2 + fib1;
        fib1 = fib2;
        fib2 = fib_sum;
    }
    return fib_sum;
}
 
int rekurs_fibo(int fib1, int fib2, int val)
{
    int fib_sum = fib2 + fib1;
    if(fib_sum <= val)
    {
        printf("%d ",fib1);
        fib_sum =+ rekurs_fibo(fib2, (fib1 + fib2), val);
    }
    else
        printf("%d ",fib1);
    return fib_sum;
}
 
int main()
{
    int value;
    int direct_sum;
    int rekurs_sum;
    while(1)
    {
        printf("Enter value : ");
        scanf("%d",&value);
        direct_sum = direct_fibo(value);
        printf("\ndirect_sum %d\n",direct_sum);
        rekurs_sum = rekurs_fibo(1,1,value);
        printf("\nrekurs_sum %d\n",rekurs_sum);
    }
    return 0;
}
Миниатюры
Функция чисел Фибоначчи, предшествующих вводимому числу  
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.03.2012, 19:15     Функция чисел Фибоначчи, предшествующих вводимому числу #5
C++
1
2
3
4
long fibon(const unsigned& n)
{
   return !n || n == 1 ? 1 : fibon(n - 1) + fibon(n - 2);
}
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
11.03.2012, 19:17  [ТС]     Функция чисел Фибоначчи, предшествующих вводимому числу #6
Подскажите while(1) - это бесконечный ввод и как правильно понять - как работает rekurs_sum = rekurs_fibo(1,1,value); ?
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 19:31     Функция чисел Фибоначчи, предшествующих вводимому числу #7
Цитата Сообщение от jeka061288 Посмотреть сообщение
Подскажите while(1) - это бесконечный ввод
- да я решил оставить возможность постоянного ввода при желании можно записать так

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(1)
* * * * {

* * * * * * * * printf("Enter value : ");
* * * * * * * * scanf("%d",&value);
* * * * * * * * direct_sum = direct_fibo(value);
* * * * * * * * printf("\ndirect_sum %d\n",direct_sum);
* * * * * * * * rekurs_sum = rekurs_fibo(1,1,value);
* * * * * * * * printf("\nrekurs_sum %d\n",rekurs_sum);
* * * * }
- всё что красным убираем и получаем одноразовый ввод
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
11.03.2012, 19:31  [ТС]     Функция чисел Фибоначчи, предшествующих вводимому числу #8
Спасибо ,понял.
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 19:35     Функция чисел Фибоначчи, предшествующих вводимому числу #9
Цитата Сообщение от jeka061288 Посмотреть сообщение
и как правильно понять - как работает rekurs_sum = rekurs_fibo(1,1,value); ?
- я специально приводил всесте и
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int direct_fibo(int val)
и
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int rekurs_fibo(int fib1, int fib2, int val)
, они имеют аналогичный функционал и логику, рекурсия как бы заменяет цикл, мы вызываем функцию повторно вместо того чтобы переходить к след итерации.

Смотри тут изменяем величины в цикле
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
fib_sum = fib2 + fib1;
* * * * * * * * fib1 = fib2;
* * * * * * * * fib2 = fib_sum;
,
а здесь вместо того чтобы организовывать итерации, просто вызываем функцию с изменёнными аргументами
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
fib_sum =+ rekurs_fibo(fib2, (fib1 + fib2), val);
Тут для понимания лучше всего поможет пошаговое прохождение алгоритма

Добавлено через 1 минуту
jeka061288, рекурсия подразумевает повторный вызов функции внутри её тела, благодаря чему возможно изменение её аргументов без итераций, т.е. как бы вызываем функцию уже с результатами предыдущих расчётов
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
11.03.2012, 19:37  [ТС]     Функция чисел Фибоначчи, предшествующих вводимому числу #10
Благодарю вас за помощь и разъяснения ,все понятно!
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.03.2012, 20:50     Функция чисел Фибоначчи, предшествующих вводимому числу #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
jeka061288, я постарался одновременно показать как решать данную задачу с циклом и рекурсией
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
 
int direct_fibo(int val)
{
    int fib1 = 1;
    int fib2 = 1;
    
    int fib_sum = fib2 + fib1;
    while(fib_sum <= val)
    {
        printf("%d ",fib1);
        fib_sum = fib2 + fib1;
        fib1 = fib2;
        fib2 = fib_sum;
    }
    return fib_sum;
}
 
int rekurs_fibo(int fib1, int fib2, int val)
{
    int fib_sum = fib2 + fib1;
    if(fib_sum <= val)
    {
        printf("%d ",fib1);
        fib_sum =+ rekurs_fibo(fib2, (fib1 + fib2), val);
    }
    else
        printf("%d ",fib1);
    return fib_sum;
}
 
int main()
{
    int value;
    int direct_sum;
    int rekurs_sum;
    while(1)
    {
        printf("Enter value : ");
        scanf("%d",&value);
        direct_sum = direct_fibo(value);
        printf("\ndirect_sum %d\n",direct_sum);
        rekurs_sum = rekurs_fibo(1,1,value);
        printf("\nrekurs_sum %d\n",rekurs_sum);
    }
    return 0;
}
хм... мне очень долгое время преподаватель всё продолжает упорно объяснять, что "двойное" сравнение как в 10 строке ( while(fib_sum <= val) ) не есть хорошо. вроде как это два сравнения и сработает медленнее чем инкрементация переменной (в данном случае val) перед циклом и в условии выхода сравнение только "<".
так как же всё-таки более правильно?
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 21:13     Функция чисел Фибоначчи, предшествующих вводимому числу #12
Черный ворон, если нужно пропечатать все числа фибоначи до указанного числа то следует использовать именно такое условие,как вариант попробуй изменить условие на меньше и погляди что станет с выводом.,Использование того или иного условия обусловлено требованиями алгоритма,а не требованиями преподавателя...
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 21:16     Функция чисел Фибоначчи, предшествующих вводимому числу
Еще ссылки по теме:

Вычислить среднее геометрическое тех элемнтов последовательности предшествующих первому отрицательное числу C++
Найти сумму натуральных чисел, предшествующих заданному числу a C++
C++ Найти произведение натуральных чисел, предшествующих заданному числу a

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 21:16     Функция чисел Фибоначчи, предшествующих вводимому числу #13
Чтобы снять все вопросы, предлагаю провести сравнение для ввода 89

Отработка с условием <=
Enter value : 89
1 1 2 3 5 8 13 21 34 55
direct_sum 144
1 1 2 3 5 8 13 21 34 55
rekurs_sum 144
Enter value :

Отработка с условием <
Enter value : 89
1 1 2 3 5 8 13 21 34
direct_sum 89
1 1 2 3 5 8 13 21 34
rekurs_sum 89
Enter value :

Как видим для условия < в ряде отсутсвует 55
Использование того или другого условия диктуется требованиями алгоритма и реализации,
если бы условие <= было ненужным его бы попросту исключили из операторов языка, но почему то же не исключают.
Не вопрос 90% задач могут быть решены без этого условия, остальные 10% никак не могут
или же обход этого условия колоссально увеличит сложность алгоритма...

Добавлено через 53 секунды
Резюме
Цитата Сообщение от Черный ворон Посмотреть сообщение
while(fib_sum <= val) ) не есть хорошо
- правда?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
90% задач могут быть решены без этого условия, остальные 10% никак не могут или же обход этого условия колоссально увеличит сложность алгоритма...
Yandex
Объявления
11.03.2012, 21:16     Функция чисел Фибоначчи, предшествующих вводимому числу
Ответ Создать тему
Опции темы

Текущее время: 04:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru