Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
1

Число Фибоначчи и рекурсия: код выдает неверные результаты

01.11.2012, 14:03. Показов 658. Ответов 4
Метки нет (Все метки)

Функция возвращает значение типа int, принимает 2 переменных типа int и 1 типа bool.
Первая переменная - номер числа из ряда Фибоначчи которое нужно найти.
Если bool будет true, то значение второй переменной по окончанию программы должно быть равно количеству рекурсивных вызовов функции. Еcли значение переменной типа bool = false,то не изменяем значение второй переменной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
      int catch22(int n,int &ilosciteracji,bool h) 
 {
     
if (h){
    ilosciteracji++;
    if (n == 1 || n == 2)
ilosciteracji++;
    return  1;
ilosciteracji++;
    return catch22(n-1, ilosciteracji, h) + catch22(n-2, ilosciteracji, h);
}
else
{
 
     if(n==1) 
     return 1;
     if(n==2) 
     return 1;
     return catch22(n-1, ilosciteracji, h) + catch22(n-2, ilosciteracji, h);
}
получилось что-то такое, но выдает то правильные ответы, то нет. Где тут может быть ошибка?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2012, 14:03
Ответы с готовыми решениями:

Неверные результаты выражений c++
Столкнулся с такой проблемой, есть выражение:...

Простой пример из книги. Объяснить, почему код выдает такие результаты
Коллеги, привожу простой пример из книги Страуструппа. #include <iostream.h> #include...

Число Фибоначчи до числа n. Код неправильно работает
Надо написать код через main что бы программа просила ввести пользователя положительное число n,...

Написать код, который бы вычислял число Фибоначчи n раз
Помогите написать код который бы вычислял число Фибоначчи n-раз. Например: n=0 f=1, n=1 f=1, n=2...

4
Дмитрий3241
01.11.2012, 14:15
  #2

Не по теме:

Да в таком написание читать то не возможно, а вы про то что неправильно выдает.
Сделайте вот так: ctrl+a, delete

0
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
01.11.2012, 14:24  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (h){
         ilosciteracji++;
         if (n == 1 || n == 2)
             ilosciteracji++;
         return  1;
         ilosciteracji++;
         return catch22(n-1, ilosciteracji, h) + catch22(n-2, ilosciteracji, h);
     }
     else
     {
 
         if(n==1) 
             return 1;
         if(n==2) 
             return 1;
         return catch22(n-1, ilosciteracji, h) + catch22(n-2, ilosciteracji, h);
     }
так читабельнее?
Шутка про "выделить-удалить" реально удалась.
0
657 / 527 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
01.11.2012, 14:29 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int catch22( int n, int &ilosciteracji, bool h ) 
{
    if ( h ) 
    {
        ilosciteracji++;
        if ( n == 1 || n == 2 )
            ilosciteracji++;
        return 1; // Если h будет = true, то функция всегдя будет ворачивать 1.
        ilosciteracji++; // Эта строчка
        return catch22( n - 1, ilosciteracji, h ) + catch22( n - 2, ilosciteracji, h ); // И эта некогда не будут выполнены
    }
    else 
    { 
       /* if ( n == 1 ) Условия можно было ебьединить
            return 1;
        if ( n == 2 ) 
            return 1; */
        if ( n == 1 && n == 2 )
            return 1;
 
        return catch22( n - 1, ilosciteracji, h) + catch22( n - 2, ilosciteracji, h );
    }
}
Добавлено через 2 минуты
Вот вполне годная функция:
C++
1
2
3
4
5
6
int fib_rec(int n)
{
  if (n==1)or(n==2)
    return 1;
  return fib_rec(n-1)+fib_rec(n-2);
}
1
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
01.11.2012, 15:49  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
int catch22(int n, int & kolrekurs)
if ( n == 1 || n == 2 )
        {
            return 1;
        }
        else
        {
 
        return catch22( n - 1, kolrekurs) + catch22( n - 2, kolrekurs );
        }
Спасибо за помощь.
А как подсчитать количество рекурсивных вызовов функции? В примере для 3 числа Фибоначчи эта функция должна вызываться 5 раз, но у меня постоянно выходит 4.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2012, 15:49

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Итераторы, числа фибоначчи-выдает неверные результаты
Вот суть задачи : Реализовать в виде последовательности генерацию первых N чисел Фибоначчи (N0=0,...

Программа выдает неверные результаты.
Помогите пожалуйста найти ошибку. Программа должна просчитывать матрицу методом Гаусса Жордана. Но...

Дельфи выдает неверные результаты
Условия: использовать могу только Database Desktop и только встроенные средства Delphi 7 (в рамках...

НОД, НОК - программа выдает неверные результаты
помогите! почему программа не правильно работает? :) private static void ebob_ekob(int eded1,int...


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

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

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