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

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

Войти
Регистрация
Восстановить пароль
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

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

01.11.2012, 14:03. Просмотров 481. Ответов 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);
}
получилось что-то такое, но выдает то правильные ответы, то нет. Где тут может быть ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 14:03     Число Фибоначчи и рекурсия: код выдает неверные результаты
Посмотрите здесь:

рекурсия + двоичная система + Фибоначчи C++
C++ Рекурсия в нахождении числа ряда Фибоначчи.
C++ рекурсия и массивы: числа Фибоначчи
Рекурсия, ряд Фибоначчи (определить количество рекурсивных вызовов функции) C++
C++ рекурсия числа Фибоначчи
Простой пример из книги. Объяснить, почему код выдает такие результаты C++
C++ Число Фибоначчи до числа n. Код неправильно работает
C++ При вводе даты рождения и номера телефона в структуру выдает неверные данные
Функции. Рекурсия на примере Фибоначчи C++
Числа Фибоначчи и рекурсия C++
C++ Почему sizeof выдает разные результаты?
Написать код, который бы вычислял число Фибоначчи n раз C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Дмитрий3241
01.11.2012, 14:15
  #2

Не по теме:

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

maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 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);
     }
так читабельнее?
Шутка про "выделить-удалить" реально удалась.
Дмитрий3241
 Аватар для Дмитрий3241
638 / 509 / 52
Регистрация: 07.07.2011
Сообщений: 1,226
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);
}
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 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.
Yandex
Объявления
01.11.2012, 15:49     Число Фибоначчи и рекурсия: код выдает неверные результаты
Ответ Создать тему
Опции темы

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