Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Визуализация рекурсии 
:(
    Опции темы
Mastodont
Дата 28.3.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



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

Кода на рисунке 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()?
PM MAIL   Вверх
ИванМ
Дата 28.3.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 5
Всего: 23



Цитата(Mastodont @  28.3.2010,  13:08 Найти цитируемый пост)
Что здесь понимается под "локальной переменной"? n?
Параметр рекурсивного вызова - это, я так понимаю, то, что в скобках функции fibonacci()? 

все правильно

PM MAIL   Вверх
Mastodont
Дата 30.3.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Написал так:
Код

//Рис. 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". Но как сделать так, чтобы она менялась?
PM MAIL   Вверх
ИванМ
Дата 30.3.2010, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 5
Всего: 23



Цитата(Mastodont @  30.3.2010,  15:07 Найти цитируемый пост)
Но как сделать так, чтобы она менялась?

передавать ее параметром функции fibonacci или делать глобальной/статической, если всегда она при последующем вызове будет увеличиваться. в любом случае первый вариант лучше
PM MAIL   Вверх
Mastodont
Дата 4.4.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Сделал отступ статической.

Цитата
передавать ее параметром функции fibonacci

в качестве аргумента функции что ли? Несовсем понял. Напиши подробнее.
PM MAIL   Вверх
ИванМ
Дата 4.4.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 5
Всего: 23



Цитата(Mastodont @  4.4.2010,  12:27 Найти цитируемый пост)
в качестве аргумента функции что ли

да
PM MAIL   Вверх
Mastodont
Дата 5.4.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Понятно. Попробую.
PM MAIL   Вверх
ИванМ
Дата 5.4.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 5
Всего: 23



Mastodont, по идеи конечно так делать неграмотно. Грамотно отдельную функцию написать, которая будет вызывать fibonacci и выводить инфу. Ей уже и передавать этот аргумент.
PM MAIL   Вверх
Mastodont
Дата 8.4.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Цитата
Грамотно отдельную функцию написать, которая будет вызывать fibonacci и выводить инфу. Ей уже и передавать этот аргумент.

Спасибо =) Сейчас подумаю, как сделать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.