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

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

Войти
Регистрация
Восстановить пароль
 
nzr
0 / 0 / 0
Регистрация: 02.10.2016
#1

Вычислить суммы первых K чисел Фибоначчи для K=1 … N - C++

24.11.2012, 09:11. Просмотров 1048. Ответов 12
Метки нет (Все метки)

Вычислить суммы первых K чисел Фибоначчи для K=1 … N.
a)Не храним промежуточные значения вычислений.
b)Храним промежуточные значения вычислений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 09:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить суммы первых K чисел Фибоначчи для K=1 … N (C++):

Вычислить N первых чисел Фибоначчи, которые определяются из рекуррентных соотношений: - C++
Вычислить N первых чисел Фибоначчи, которые определяются из рекуррентных соотношений: f(1)=f(2)=1, f(n)=f(n-1)+f(n-2) , n>=2,...

Функция, которая для заданного целого числа m находит среди первых m^2-1 чисел Фибоначчи хотя бы одно, делящееся на m (перевести на Си) - C++
Условие: Напишите функцию, которая для заданного целого числа m находит среди первых m2-1 чисел Фибоначчи хотя бы одно, делящееся на m ...

Сумма n первых чисел Фибоначчи - C++
Сами числа Фибоначчи есть, #include <iostream.h> int main() { int n; int i,i1=1,i2=1; cout << "n="; ...

вывести на экран n первых чисел Фибоначчи - C++
Помогите написать программу в Visual Studio 2008. Вывести на экран n первых чисел Фибоначчи. Для вычисления n-го числа использовать...

Найти среди первых чисел Фибоначчи хотя бы одно, делящееся на m - C++
Друзья! Прошу помощи с задачками, кто чем может. А то препод сказал НАДО. А меня даже чайником назвать нельзя( Вот эти задачи. 2. Для...

найти среди первых чисел Фибоначчи хотя бы одно, делящееся на m - C++
Друзья! Прошу помощи с задачками, кто чем может. А то препод сказал НАДО. А меня даже чайником назвать нельзя( Вот эти задачи. 1. Целое...

12
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
24.11.2012, 14:00 #2
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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
unsigned long fibon(unsigned int n);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int K;
    unsigned long summ = 0;
 
    cin >> K;
 
    for (int i=0; i<K; i++)
        summ += fibon(i);
 
    cout << summ << endl;
 
    system("pause");
    return 0;
}
 
 
unsigned long fibon(unsigned int n)
{
    if (n==0 || n==1) return n;
    return fibon(n-1) + fibon(n-2);
}
0
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 1
24.11.2012, 14:01 #3
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
 #include "iostream" 
using namespace std;
 unsigned long fibon(unsigned int n);
 int _tmain(int argc, _TCHAR* argv[]) {
 int K; unsigned long summ = 0;
 cin >> K; for (int i=0; i<K; i++)
 summ += fibon(i); 
cout << summ << endl;
 system("pause"); 
return 0; 
} 
unsigned long fibon(unsigned int n) {
 if (n==0 || n==1) return n;
 return fibon(n-1) + fibon(n-2); 
}
наказывать за такое надо. Ты каждый раз рекурсивно пересчитываешь каждое новое число Фибонначчи, хотя в процессе вычисления суммы, ты уже все предыдущие числа считал из-за таких как ты системные требования ПО растут!!!
2
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
24.11.2012, 14:08 #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
наказывать за такое надо.
Почему? я проверял и все правильно

Добавлено через 3 минуты
Kuzia domovenok, все понял. спасибо. тогда можно через массивы сделать.
0
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 1
24.11.2012, 14:48 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
int main(){
    int K; 
    unsigned long summ = 2;
    cin >> K;
    int f1=1;    
    int f2=1;
    int temp;
    if(k==1) cout<<1;
    else if (k==2) cout<<2;
    else{
    for (int i=3; i<=K; i++)
    {
        temp=f1+f2;//текущее число
        sum+=temp;//сумма
        f1=f2;    //пред-предыдущее число
        f2=temp;//предыдущее число
        }//end for
        cout<<sum;
    }//end if else
}
Добавлено через 37 минут
поправка
C++
1
unsigned long sum = 2;
0
n00baS_
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 35
08.11.2017, 09:55 #6
интересно что в обеих программах, ответ разный)
0
Байт
Диссидент
Эксперт C
16832 / 11097 / 1743
Регистрация: 24.12.2010
Сообщений: 21,795
08.11.2017, 12:12 #7
Цитата Сообщение от n00baS_ Посмотреть сообщение
интересно что в обеих программах, ответ разный)
Просто в одном случае рассматривается ряд 0 1 1 2 3 5 8, а в другом 1 1 2 3 5 8 13

Добавлено через 2 минуты
v.a.l.i.d, Kuzia domovenok, можно еще посчитать Fk+2 и отнять от него единичку...
0
Fixer_84
722 / 533 / 270
Регистрация: 30.04.2016
Сообщений: 1,542
08.11.2017, 13:41 #8
Я бы решал эту задачу так (числа Фибоначчи лучше не вычислять с помощью рекурсии, медленно будет работать):

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int K, sum = 0;
    int a, b, c;
    cin >> K;
    a = 1;
    b = 1;
    while (K > 0)
    {
        K--;
        c = a + b;
        cout << a << " ";
        sum += a;
        a = b;
        b = c;
    }
    cout << "\n" << sum << "\n";
    return 0;
    cin.get();
}
0
n00baS_
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 35
08.11.2017, 13:46 #9
Fixer_84, ну да ваш метод быстрее последнего на 0.5 секунды)) только не понятно почему К-- ? объясните для недалеких)
0
Fixer_84
722 / 533 / 270
Регистрация: 30.04.2016
Сообщений: 1,542
08.11.2017, 13:52 #10
n00baS_, последний метод - это то же самое, что у меня Просто поздно увидел его (пост #5). Я имел ввиду пост #2, где используется рекурсия. При большом количестве чисел Фибоначчи (в моем коде - это число K) он будет работать очень медленно.
1
n00baS_
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 35
10.11.2017, 10:44 #11
Fixer_84, а можно полюбопытствовать, а у Вас какой метод?
0
Fixer_84
722 / 533 / 270
Регистрация: 30.04.2016
Сообщений: 1,542
10.11.2017, 12:57 #12
n00baS_, здравствуйте. Я просто использовал цикл while, задав начальные значения для a и b. Дальше, так как числа Фибоначчи формируются по заданному правилу (каждое последующее число равно сумме двух предыдущих, то есть с = a + b), я просто отразил это правило в цикле, задав необходимое количество чисел. Если честно, это не мой метод. Я узнал об этом от своего преподавателя по программированию. Так работает намного быстрее, так как необходимые операции - это только лишь присваивание и сложение (а такие операции, как вы, наверное, знаете, обрабатываются очень быстро).
0
n00baS_
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 35
10.11.2017, 13:21 #13
Fixer_84, ну я примерно это и предполагал, только услышал от умных людей (от Вас)
0
10.11.2017, 13:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2017, 13:21
Привет! Вот еще темы с ответами:

Частое от деления любого из первых 10 чисел Фибоначчи на предшествующее стремится к золотому сечению - C++
Посчитать первые 10 чисел Фибоначчи и показать что частое от деления любого числа последовательности на предшествующее число стремится к...

Написать программу суммы первых 10 натуральных чисел - C++
Написать программу суммы первых 10 натуральных чисел.

Вычисление суммы первых N целых положительных нечетных чисел - C++
Помогите пожалуйста составить программу в С++. Написать программу, которая вычисляет сумму первых N целых положительных нечетных чисел...

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


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

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

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