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

Фибоначчи - C++

Восстановить пароль Регистрация
 
Rafnes
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 6
22.10.2011, 12:35     Фибоначчи #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int pay (int k)
    {
    unsigned int a[90];
    int b,p;
    a[1] = 0; a[2] = 1; a[3] = 1;
    for (int i=4; i < k; i++) {
        a[i] = a[i-1] + a[i-2];
        }
    p = a[k]; 
    return (p);
    }
int main ()
{
    unsigned int N;
    freopen ("input.txt", "r", stdin);
    cin >> N;
    freopen ("output.txt", "w", stdout);
    cout << pay (N);
    freopen("CON", "w", stdout);
    return 0;
}
Уже голова кипит, а он все равно выдает 0... Прошу, помогите найти ошибку!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2011, 12:35     Фибоначчи
Посмотрите здесь:

C++ Фибоначчи
Фибоначчи C++
C++ Фибоначчи
C++ фибоначчи от и до.
C++ Фибоначчи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.10.2011, 12:42     Фибоначчи #2
см. комментарии
Цитата Сообщение от Rafnes Посмотреть сообщение
for (int i=4; i < k; i++) {// i никогда не станет равной k
a[i] = a[i-1] + a[i-2];// а значит a[k] не будет вычисляться
}
p = a[k];// возвращаем значение которое не вычислялось
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.10.2011, 12:50     Фибоначчи #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
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_FIB 90
 
size_t pay(size_t n)
{
    static size_t fibs[MAX_FIB] = {1, 1};
    static size_t idx_last = 1;
 
    /* 0 - заведомо неверное значение
     * используется для индикации
     * неправильных входных данных (n >= MAX_FIB)
     */
    if(n >= MAX_FIB)
    return 0;       
        
    while(idx_last < n)
    {
    fibs[idx_last + 1] = fibs[idx_last] + fibs[idx_last - 1];
    ++idx_last;
    }
    
    return fibs[n];
}
 
#define PRINT_FIB(N) printf("fib[%02u] = %u\n", (N), pay(N))
 
int main(void)
{
    /* нумерацию чисел Фибоначчи будем начинать с нуля, как
     * и начинается индексация массивов в С
     */
    size_t i;
 
    /* первые 10 чисел Фибоначчи */
    for(i = 0; i < 10; ++i)
    PRINT_FIB(i);
    
    exit(0);
}
Rafnes
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 6
22.10.2011, 13:15  [ТС]     Фибоначчи #4
valeriikozlov, Огромнейшее спасибо!
Yandex
Объявления
22.10.2011, 13:15     Фибоначчи
Ответ Создать тему
Опции темы

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