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

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

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

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

01.11.2012, 14:03. Просмотров 494. Ответов 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++
Столкнулся с такой проблемой, есть выражение: 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......

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

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

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

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

Рекурсия: вычисление чисел Фибоначчи - C++
Числа Фибоначчи Fn вычисляются по формуле F0=F1=1; Fn=Fn-1+Fn-2, при n=2,3,... Нужно реализовать функцию, которая по заданому номеру n...

Рекурсия в нахождении числа ряда Фибоначчи. - C++
Лаба: написать программу, находящуую заданный элемент ряда Фибоначчи. Написал: #include <stdio.h> void main() { int M, i, n; ...


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

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

Не по теме:

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

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
638 / 509 / 52
Регистрация: 07.07.2011
Сообщений: 1,227
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
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     Число Фибоначчи и рекурсия: код выдает неверные результаты
Ответ Создать тему
Опции темы

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