Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 14:07   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Визуализация рекурсии

У Дейтлов есть задача


Кода на рисунке 3.14 такой:
Код:
//Рис. 3.15: fig03_15.cpp
//Рекурсивная функция вычисления числа Фибоначчи
#include<iostream>
using std::cout;
using std::cin;
using std::endl;

#include<windows>

unsigned long fibonacci(unsigned long);

int main()
{
   unsigned long result, number;

   cout << "Vvedite celoe chislo: ";
   cin >> number;
   result = fibonacci(number);
   cout << "Chislo Fibonachchi(" << number << ") = " << result << endl;

   system("pause");
   return 0;
}

//Рекурсивная описание функции fibonacci
unsigned long fibonacci(unsigned long n)
{
   if (n == 0 || n == 1) //общий случай
      return n;
   else //рекурсивный случай
      return fibonacci(n - 1) + fibonacci(n - 2);
}
Что здесь понимается под "локальной переменной"? n?

Параметр рекурсивного вызова - это, я так понимаю, то, что в скобках функции fibonacci()?
fs444 вне форума Ответить с цитированием
Старый 28.03.2010, 14:27   #2
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Да, все правильно понимаете
k1r1ch вне форума Ответить с цитированием
Старый 28.03.2010, 21:08   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Код:
unsigned long fibonacci(unsigned long n)
{
   if (n == 0 || n == 1) //общий случай
      return n;
   else //рекурсивный случай
   {
      std::cout << n << std::endl;
      std::cout << n-1 << " + " << n-2 << std::endl;
      return fibonacci(n - 1) + fibonacci(n - 2);
   }
}
MaTBeu вне форума Ответить с цитированием
Старый 30.03.2010, 16:08   #4
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Написал так:
Код:
//Рис. 3.15: fig03_15.cpp
//Рекурсивная функция вычисления числа Фибоначчи
#include<iostream>
using std::cout;
using std::cin;
using std::endl;

#include<windows>

unsigned long fibonacci(unsigned long);

int main()
{
   unsigned long result, number;

   cout << "Vvedite celoe chislo: ";
   cin >> number;
   result = fibonacci(number);
   cout << "Chislo Fibonachchi(" << number << ") = " << result << endl;

   system("pause");
   return 0;
}

//Рекурсивная описание функции fibonacci
unsigned long fibonacci(unsigned long n)
{
   int otstup = 0; //величина отступа строки от левого края экрана

   if (n == 0 || n == 1) //общий случай
      return n;
   else //рекурсивный случай
   {
      //печатаем отступ перед выводом n
      for (int i = 1; i <= otstup; i++)
      {
         cout << " ";
      }

      cout << "n: " << n << endl;

      //печатаем отступ перед выводом (n - 1) + (n - 2)
      for (int i = 1; i <= otstup; i++)
      {
         cout << " ";
      }

      ++otstup;

      cout << "(n - 1) + (n - 2) = " << n - 1 << " + " << n - 2 << endl;

      return fibonacci(n - 1) + fibonacci(n - 2);
   }
}
Только отступ сделать не смог. Я понимаю, что переменная otstup не меняется, потому что каждый раз при вызове fibonacci() ставится в "0". Но как сделать так, чтобы она менялась?
fs444 вне форума Ответить с цитированием
Старый 31.03.2010, 20:31   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
static int otstup = 0;
...
int t = fibonacci(n - 1) + fibonacci(n - 2);
--otstup;
return t;
Somebody вне форума Ответить с цитированием
Старый 04.04.2010, 23:31   #6
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Somebody,спасибо =)
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложная визуализация Domanoff Помощь студентам 6 07.03.2010 19:25
Визуализация ekzobyte Мультимедиа в Delphi 1 18.03.2009 18:11
Визуализация работы макроса zander Microsoft Office Excel 7 15.02.2009 01:09
BASS Визуализация Garacio_cain Мультимедиа в Delphi 2 14.08.2008 00:19
визуализация алгоритма Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:10