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

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

Восстановить пароль Регистрация
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
01.11.2012, 14:03     Число Фибоначчи и рекурсия: код выдает неверные результаты #1
Функция возвращает значение типа 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);
}
получилось что-то такое, но выдает то правильные ответы, то нет. Где тут может быть ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Дмитрий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
634 / 505 / 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     Число Фибоначчи и рекурсия: код выдает неверные результаты
Ответ Создать тему
Опции темы

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