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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2016, 23:35   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию В задаче вычисление факториала рекурсивно, и меня как-то ввело с ступор, как и что выводить, да ещё чтобы крачиво)

Всем, привет! Начал изучать C++ не так уж давно, сейчас изучаю, точнее, пытаюсь это делать по книге Дейтел Х., Дейтел П. Как пролграммировать на C++. Как-то идёт не очень резво обучение и вот небольшая загвоздка, суть вот в чём:
Цитата:
(Визуализация рекурсии) Интересно наблюдать рекурсию «в действии». Моди*
фицируйте функцию факториала на рис. 6.29 так, чтобы печатать ее локальную
переменную и параметр рекурсивного вызова. Для каждого рекурсивного вызова
отобразите выходные данные в отдельной строке и добавьте отступ. Сделайте все
возможное для того, чтобы выходные данные были ясными, интересными и зна*
чимыми. Ваша цель — разработать и реализовать такой формат выходных дан*
ных, который поможет лучше понять рекурсию. Вы можете добавлять такие изо*
бразительные возможности во многие другие примеры и упражнения по рекур*
сии в этой книге.
В задаче вычисление факториала рекурсивно, и меня как-то ввело с ступор, как и что выводить, да ещё чтобы крачиво)
Код:
#include <iostream>
#include <iomanip>
#include "CyrIOS.h"

unsigned long factorial(unsigned long);

using namespace std;
int main()
{
	for(int count = 1; count <= 5; count++)
		cout << count << "! = " << factorial(count) << endl;
	    
	return 0;
}

unsigned long factorial(unsigned long number)
{
	//static unsigned long otstup = 0; //величина отступа строки от левого края экрана
	cout << number << ' ' << ' ';
	if(number <= 1)
		return 1;
	else

	cout << "number = " << number << ' ';

	



	cout << "factorial(number - 1) = " << (number - 1) << endl;

	    return number * factorial(number - 1);
}
вот моё вариант, что смог сам.

Что такое локальная переменная в рекрсивной функции это number?
Что такое параметр рекурсивного вызова это factorial(number - 1) ?

я так понимаю, что отобразить данные рекурсивного вызова - это отобразить те данные кторые по окончании работы т.е. когда значение number <= 1 станет истиным нужно как-то вывести значения, которые будут возвращаться из стека, где они сохранялись вместе в адресом возврата, но как это зделать не пойму... Может кто поможет с этим.
Если не туда написал, заранее, пардон!
apofioz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО]: Как выводить предложение it's my car в языке Паскаль? (как выводить апострофы (') на экран) SASFM Паскаль, Turbo Pascal, PascalABC.NET 2 13.12.2016 21:00
Как сделать чтобы символы пробел и Ентер не записывались? Вот как я придумал но, что-то не работает Aqua77 Общие вопросы C/C++ 4 05.08.2015 03:52
Вычисление a^n рекурсивно и не рекурсивно. Katerina_K Помощь студентам 3 02.07.2014 11:59
Как создать тест в Delphi и ещё кое что (((sheva))) Общие вопросы Delphi 1 22.04.2011 16:22
20 строк ввели меня в ступор erro Общие вопросы C/C++ 11 04.03.2011 19:10