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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
VovaMazur
-12 / 33 / 8
Регистрация: 10.03.2011
Сообщений: 133
#1

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

22.03.2011, 03:00. Просмотров 2121. Ответов 14
Метки нет (Все метки)

Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk;
k = 1, 2, 3,...)
C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2011, 03:00     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...)
Посмотрите здесь:
C++ Найти первые N чисел Фибоначчи (рекурсия/итерация, сравнить эффективность)
Посчитать первые 10 чисел Фибоначчи C++
C++ Вывести на экран первые 20 чисел Фибоначчи.
C++ Посчитать первые числа Фибоначчи и показать, что сумма этих чисел кратна 11
C++ Найти первые 25 тетраэдральных чисел
найти первые N целых чисел C++
Вывести первые 11 членов последовательности Фибоначчи C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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, " "));
}
Байт
Эксперт C
15846 / 10173 / 1524
Регистрация: 24.12.2010
Сообщений: 19,184
22.03.2011, 09:23     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Первое положительное число как бэ ноль.
ForEveR, хотел было обрушиться на тебя с высоты всего своего чуть выше среднего образования, но покопавшись в инете, увидел столько бреда на эту тему! Шерсть дыбом!
Так что вины твоей здесь нет, это вот такое дурацкое расхожее мнение.
И если люди не могут договориться о такой ерунде, то что говорить о вещах чуть более сложных.
На всякий случай сообщаю, что с точки зрения классической математики Ноль является неотрицательным числом. А положительным он никогда не был.
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.03.2011, 09:55     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #5
Добавлю, что нуль есть число, делящее числовой ряд на две части - положительные и отрицательные числа. А сам он ни к тем, ни к другим не относится.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.03.2011, 12:05     Найти первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk +1 = fk-1 + fk; k = 1, 2, 3,...) #6
Байт, Черт ну да. Ночью писал. Не подумал, что пишу. Извиняюсь сильно.
Байт
Эксперт C
15846 / 10173 / 1524
Регистрация: 24.12.2010
Сообщений: 19,184
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
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,508
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;
}
Байт
Эксперт C
15846 / 10173 / 1524
Регистрация: 24.12.2010
Сообщений: 19,184
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
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,508
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
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 526
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
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,508
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++ Найти сумму чисел Фибоначчи в последовательности
Найти, входит ли в последовательность чисел l-е число Фибоначчи C++
C++ Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду Фибоначчи
Найти наибольший общий делитель двух чисел Фибоначчи C++
C++ Найти сумму чисел Фибоначчи, меньших заданного числа Q

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

Или воспользуйтесь поиском по форуму:
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,...)
Ответ Создать тему
Опции темы

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