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

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

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

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

01.11.2012, 14:03. Просмотров 502. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 14:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Число Фибоначчи и рекурсия: код выдает неверные результаты (C++):

Неверные результаты выражений c++ - C++
Столкнулся с такой проблемой, есть выражение: 0.4*((4−10)*(4−20))/((0−10)*(0−20))​​ +0.3*((4−0)*(4−20))/((10−0)*(10−20)) ​​...

Простой пример из книги. Объяснить, почему код выдает такие результаты - C++
Коллеги, привожу простой пример из книги Страуструппа. #include <iostream.h> #include <conio.h> void f(int a){ ...

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

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

При вводе даты рождения и номера телефона в структуру выдает неверные данные - C++
#pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include <conio.h> #include <iostream.h> #include...

Числа Фибоначчи и рекурсия - C++
Всем привет. Кто может мне доступно объяснить нахождение числа? Да и вообще, что мы ищем? Есть ряд: 0, 1, 1, 2, 3, 5, 8, 13, 21......

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Дмитрий3241
01.11.2012, 14:15
  #2

Не по теме:

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

0
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);
     }
так читабельнее?
Шутка про "выделить-удалить" реально удалась.
0
Дмитрий3241
640 / 511 / 52
Регистрация: 07.07.2011
Сообщений: 1,228
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
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.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2012, 15:49
Привет! Вот еще темы с ответами:

Rand выдает не те результаты - C++
Здравствуйте учусь программировать, по тыкайте меня носом пожалуйста где неправильно ставлю, один придел рандома гонит непонятно что но...

Функции. Рекурсия на примере Фибоначчи - C++
Можете начинающему объяснить решен задачи про числа фиибоначи с помощью рекурсии. Вот код // Fibonacci series using recursion ...

рекурсия + двоичная система + Фибоначчи - C++
Написать рекурсивную функцию перевода десятичного числа в двоичное и используя ее найти и вывести на печать двоичные коды первых 100 чисел...

рекурсия и массивы: числа Фибоначчи - C++
привет всем ! как с помощью рекурсии с параметрами массива реализовать числа Фибоначчи ? вот что то на клепал #include "stdafx.h" ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.11.2012, 15:49
Ответ Создать тему
Опции темы

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