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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
deematter
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 7
#1

Рекурсия в нахождении числа ряда Фибоначчи. - C++

18.12.2011, 13:52. Просмотров 3411. Ответов 7
Метки нет (Все метки)

Лаба: написать программу, находящуую заданный элемент ряда Фибоначчи.
Написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void main()
{
    int M[100], i, n;
    
    printf("Программа подсчитывает значение требуемого элемента ряда Фибоначчи.\n");
    printf("Введите номер желаемого числа: ");
    scanf("%d", &n);
        if ((n<=0) || (scanf("%d", &n) != 1))
        {   printf("Неккоректное значение!\n");
            return;
        }
        
    M[0] = 1;
    M[1] = 1;
    for (i=2; i<n; i++)
    {   M[i] = M[i-1] + M[i-2];
    }
    
    printf("%d'й член ряда Фибоначчи равен %d", n, M[i-1]);
}
Препод посмотрел, сказал поставит зачот если добавлю рекурсию. Надо сказать, он весьма нелюбим студентами и всегда старается всех завалить на самых мелких недочетах. Поэтому хотел спросить совета - как лучше всего использовать здесь рекурсию? Боюсь сделать что-то не так, а сдавать после завтра уже.
Я изначально хотел for записать в отдельную функцию, а потом просто вызвать в ходе программы, это вроде бы считается за рекурсию? Поправьте меня или подскажите код, которым это реализуется красиво и качественно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсия в нахождении числа ряда Фибоначчи. (C++):

Числа Фибоначчи и рекурсия - C++
Всем привет. Кто может мне доступно объяснить нахождение числа? Да и вообще, что мы ищем? Есть ряд: 0, 1, 1, 2, 3, 5, 8, 13, 21......

рекурсия и массивы: числа Фибоначчи - C++
привет всем ! как с помощью рекурсии с параметрами массива реализовать числа Фибоначчи ? вот что то на клепал #include &quot;stdafx.h&quot; ...

Рекурсия: определить номер и значение числа Фибоначчи, не превышающего заданную величину - C++
Здравствуйте,можете пожалуйста написать код? Вот задание: Определить порядковый номер и значение члена ряда Фибоначчи, не...

Написал программу которая показывает числа из ряда Фибоначчи - C++
Вот написал программу которая...Ай, мне сложновато объяснить, напишу сразу алгоритм её действия: 1.Пользователь вводит номер числа из...

Написать рекурсивную функцию вычисления числа из ряда Фибоначчи, номер которого вводится с клавиатуры - C++
2. Написать рекурсивную функцию вычисления числа из ряда Фибоначчи, номер которого вводится с клавиатуры. помогите понять рекурсию

Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду Фибоначчи - C++
Помогите с задачкой Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду...

7
rostik123
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 22
18.12.2011, 14:10 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<conio.h>
unsigned    long fibo(unsigned  long);
void main()
{
using   namespace std;
unsigned    long n;_  
    cout<<"Enter n:"; cin >> n;
    cout << "Fibo number:" << fibo(n) << endl;
    _getch();
}
unsigned    long fibo(unsigned  long number)
{
if(number==1)
return 1;
else    if (number==0)
return 0;
else
return fibo(number-1) + fibo(number-2);
}
0
deematter
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 7
18.12.2011, 14:26  [ТС] #3
Цитата Сообщение от rostik123 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<conio.h>
unsigned    long fibo(unsigned  long);
void main()
{
using   namespace std;
unsigned    long n;_  
    cout<<"Enter n:"; cin >> n;
    cout << "Fibo number:" << fibo(n) << endl;
    _getch();
}
unsigned    long fibo(unsigned  long number)
{
if(number==1)
return 1;
else    if (number==0)
return 0;
else
return fibo(number-1) + fibo(number-2);
}
Боюсь, я не понимаю большую часть кода, не смогу объяснить преподу что и для чего.
А мой код совсем не исправить?
И плюс к этому - я на Убунту не могу правильно подключить conio.h.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
18.12.2011, 15:11 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
typedef unsigned long long ulong;
 
ulong fib (int n)
{
    if (n==1 || n==2) return 1;
    return fib(n-1)+fib(n-2);
}
 
 
int main()
{
    int n;
    std:: cin >> n;
    std:: cout << fib(n) << "\n";
    system ("pause");
    return 0;
}
А если меморизацию поставите - зачет в кармане

Добавлено через 23 минуты
Что-то вроде
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
#include <iostream>
 
typedef _int64 ulong;
int mem[20]={0};
 
 
ulong fib (int n)
{
    if (n==1 || n==2) return 1;
    if (mem[n]!=0) return mem[n];
    else 
    {
        mem[n]=fib(n-1)+fib(n-2);
        return mem[n];
    }
}
 
 
int main()
{
    int n;
    std:: cin >> n;
    std:: cout << fib(n) << "\n";
    system ("pause");
    return 0;
}
Так гораздо быстрее работает
1
yekka
386 / 150 / 8
Регистрация: 12.05.2011
Сообщений: 450
18.12.2011, 15:20 #5
Цитата Сообщение от Dani Посмотреть сообщение
mem[n]=fib(n-1)+fib(n-2);
лучше бы, наверное,
C++
1
mem[n]=fib(n-2)+fib(n-1);
дабы при вычислении fib(n-1) использовалось уже готовое к этому времени fib(n-2)
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
18.12.2011, 15:26 #6
я еще не выспался, массив типа int, а надо ulong.

Добавлено через 30 секунд
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
#include <iostream>
 
typedef _int64 ulong;
ulong mem[20]={0};
 
 
ulong fib (int n)
{
    if (n==1 || n==2) return 1;
    if (mem[n]!=0) return mem[n];
    else 
    {
        mem[n]=fib(n-2)+fib(n-1);
        return mem[n];
    }
}
 
 
int main()
{
    int n;
    std:: cin >> n;
    std:: cout << fib(n) << "\n";
    system ("pause");
    return 0;
}
0
deematter
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 7
18.12.2011, 18:52  [ТС] #7
Всем огромное спасибо, особенно Deni - ваш пример я использовал в качестве основного, правда без меморизации)
0
plosha
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 8
15.08.2013, 12:20 #8
есть такая программа:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "iostream"
using namespace std;
unsigned long F_Rec(short n)
    {
        if (n==1 || n==2) return 1;
        else return F_Rec(n-1)+F_Rec(n-2);
    }
int main ()
{
    short n;
    cout<<"n="; cin>>n;
    cout<<"F_Rec("<<n<<")="<<F_Rec(n)<<endl;
    return 0;
    }
Подскажите плиз, как можно вывести не число, соответствующее вводимому номеру(как сейчас), а все числа идущие до этого номера.
0
15.08.2013, 12:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2013, 12:20
Привет! Вот еще темы с ответами:

рекурсия + двоичная система + Фибоначчи - C++
Написать рекурсивную функцию перевода десятичного числа в двоичное и используя ее найти и вывести на печать двоичные коды первых 100 чисел...

Функции. Рекурсия на примере Фибоначчи - C++
Можете начинающему объяснить решен задачи про числа фиибоначи с помощью рекурсии. Вот код // Fibonacci series using recursion ...

Рекурсия: вычисление чисел Фибоначчи - C++
Числа Фибоначчи Fn вычисляются по формуле F0=F1=1; Fn=Fn-1+Fn-2, при n=2,3,... Нужно реализовать функцию, которая по заданому номеру n...

Рекурсия: нахождение чисел Фибоначчи (нужны комментарии) - C++
это функция нахождения чисел фибоначи. немогу понять как она работает можите написат как это происходит в программе. отладка много не...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru