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

Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
VovaMazur
-12 / 33 / 8
Регистрация: 10.03.2011
Сообщений: 133
22.03.2011, 03:00     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #1
Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk;
k = 1, 2, 3,...)
C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fruktik
 Аватар для fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
22.03.2011, 03:44     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #2
VovaMazur,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main(void)
 {  
    setlocale(LC_ALL, "Russian");
    int n;
    int i,i1=1,i2=1;
    cout << "n=";
    cin >> n;
    cout << "1-е число = 1" << "\n";
    for (int k = 0; k < n; k++)
     { i = i1 + i2;
       i1 = i2;
       i2 = i;
       cout<<k+2<<"-е число = " << i <<"\n";
     }
    system("pause");
 }
можно еще с помощью рекурсии
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.03.2011, 04:42     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #3
Числа Фибоначчи

Первое положительное число как бэ ноль.
Второе единица.

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
void fib_helper(std::vector<int>& vec, int first, int second, int n)
{
    int res=first+second;
    vec.push_back(res);
    if(n == 0)
        return;
    fib_helper(vec, second, res, --n);
}
 
std::vector<int> fib(int n)
{
    std::vector<int> vec;
    int first=0;
    int second=1;
    vec.push_back(first);
    vec.push_back(second);
    fib_helper(vec, first, second, n-2);
    return vec;
}
 
int main()
{
    int n=0;
    std::cout<<"Enter n: ";
    std::cin>>n;
    std::vector<int> vec=fib(n);
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
}
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
22.03.2011, 09:23     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Первое положительное число как бэ ноль.
ForEveR, хотел было обрушиться на тебя с высоты всего своего чуть выше среднего образования, но покопавшись в инете, увидел столько бреда на эту тему! Шерсть дыбом!
Так что вины твоей здесь нет, это вот такое дурацкое расхожее мнение.
И если люди не могут договориться о такой ерунде, то что говорить о вещах чуть более сложных.
На всякий случай сообщаю, что с точки зрения классической математики Ноль является неотрицательным числом. А положительным он никогда не был.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.03.2011, 09:55     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #5
Добавлю, что нуль есть число, делящее числовой ряд на две части - положительные и отрицательные числа. А сам он ни к тем, ни к другим не относится.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.03.2011, 12:05     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #6
Байт, Черт ну да. Ночью писал. Не подумал, что пишу. Извиняюсь сильно.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
22.03.2011, 13:01     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Байт, Черт ну да. Ночью писал. Не подумал, что пишу. Извиняюсь сильно.
Да ерунда, каждый может ошибиться, да еще ночью, да еще если пивка принять на грудь. Прости, если чем обидел, но меня тут смутило другое. Полез в Гугл, чтоб найти определение положительного числа и НЕ НАШЕЛ! Вместо этого столько бреда и ахинеи, что уши вянут.
Вот, люди добрые помогли, ссылочку откопал.
http://mathworld.wolfram.com/PositiveInteger.html
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.03.2011, 13:32     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Байт Посмотреть сообщение
хотел было обрушиться на тебя с высоты всего своего чуть выше среднего образования
Первой мыслью было тоже поржать, но передумал. Мало того, вот шаманская чудо-формула для вымучивания чисел Фибоначчи, при чём не обязательно их каждый раз все считать, можно сразу нужное получить... На большие числа не закладывался, суть не в этом...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <math.h>
 
unsigned long fib(unsigned n){
    return (unsigned long)((1.0/(pow(2.0, (double)n) * sqrt(5.0)))*(pow((1.0 + sqrt(5.0)), (double)n) - pow((1.0 - sqrt(5.0)), (double)n)));
}
 
int main(void){
    unsigned n, i;
    
    while ( printf("n = ") && scanf("%u", &n) == 1 && n )
        for ( i = 1; i <= n; ++i )
            printf("#%d\t%lu\n", i, fib(i));
    
    return 0;
}
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
22.03.2011, 15:27     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #9
easybudda, Пока базарили за Ноль, забыли про золотое сечение. Класс!
plosha
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 8
05.06.2013, 16:31     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #10
А если вспомнить про Золотое сечение...Есть ли пример программы(желательно как раз с числами Фибоначчи) который иллюстрирует этот метод? Был бы безмерно благодарен
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.06.2013, 16:37     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #11
plosha, а через пост выше - не оно?
plosha
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 8
05.06.2013, 16:43     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #12
Эм, да, действительно, не так прочел) Спасибо за прогу. Не мог бы прокомментировать данный фрагмент:

printf("#%d\t%lu\n", i, fib(i))
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
05.06.2013, 16:53     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #13
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
48
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<set>
#include<algorithm>
#include<iomanip>
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
 
void mul(ll *dest, const ll* src) {
    ll r0, r1, r2, r3;
    r0 = dest[0] * src[0] + dest[1] * src[2];
    r1 = dest[0] * src[1] + dest[1] * src[3];
    r2 = dest[2] * src[0] + dest[3] * src[2];
    r3 = dest[2] * src[1] + dest[3] * src[3];
    dest[0] = r0;
    dest[1] = r1;
    dest[2] = r2;
    dest[3] = r3;
}
 
ll fib(ll n) {
    ll Mpower[] = {0, 1, 1, 1};
    ll Mresult[] = {1, 0, 0, 1};
    int k = n + 1;
    while (k) {
        if (k & 1)mul(Mresult, Mpower);
        mul(Mpower, Mpower);
        k >>= 1;
    }
    return Mresult[1];
}
 
int main() {
    ll n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cout << fib(i) << ' ';
    }
    cout << endl;
 
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.06.2013, 16:54     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #14
plosha, вывод номера числа Фибоначчи и самого числа. К примеру
C
1
printf("#%d\t%lu\n", 3, fib(3))
выведет
Код
#3	2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 17:49     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...)
Еще ссылки по теме:

C++ Посчитать первые числа Фибоначчи и показать, что сумма этих чисел кратна 11
C++ Найти сумму чисел Фибоначчи в последовательности
C++ Найти первые 25 тетраэдральных чисел

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

Или воспользуйтесь поиском по форуму:
plosha
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 8
05.06.2013, 17:49     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #15
Цитата Сообщение от Belfegor Посмотреть сообщение
C++
1
2
3
4
#include<iostream>
#include<cmath>
...
}
Прокомментируйте пожалуйста, хотя бы в кратце.

Добавлено через 49 минут
И еще родился вопрос, почему числа корректно считаются только до 93 числа? Это как-то можно изменить? Дело наверно типах данных?
Yandex
Объявления
05.06.2013, 17:49     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...)
Ответ Создать тему
Опции темы

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