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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Определите, сколько звездочек будет напечатано в результате вызова функции F (5) - C++

26.01.2014, 17:26. Просмотров 2465. Ответов 10
Метки нет (Все метки)

Определите, сколько звездочек будет напечатано в результате вызова функции F(5):

И сама функция:

C++
1
2
3
4
5
6
7
void F(int n)
{
if (n>1)
F(n/2);
F(n-1);
printf("*");
}
Объясните почему получается ответ 13?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 17:26     Определите, сколько звездочек будет напечатано в результате вызова функции F (5)
Посмотрите здесь:
C++ Что будет вызвано в результате вызова f()?
Каким будет значение переменной k после вызова функции f в main: C++
то будет выведено в результате работы алгоритма? C++
Что будет в переменных в результате выполнения кода? C++
C++ Какое значение будет выведено в результате работы программы?
C++ Какой результат будет получен в результате выполнения этого кода?
Определить, что будет выдано на терминал в результате выполнения программы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kill100
386 / 252 / 34
Регистрация: 11.12.2010
Сообщений: 1,078
Завершенные тесты: 1
26.01.2014, 18:29     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #2
А кто вам сказал что 13? Она же грохнется с ошибкой переполнение стека.

Добавлено через 19 минут
А если
C++
1
2
3
4
5
6
7
8
9
void F(int n)
{
if (n>1)
{
   F(n/2);
   F(n-1);
}
printf("*");
}
Тоhttp://www.cyberforum.ru/cgi-bin/latex.cgi?F(5) +print(*)\rightarrow \left| F(2) +print(*)\rightarrow \left| F(1) +print(*)\\F(1) +print(*) \right|\\F(4) +print(*)\rightarrow  \left| F(2) +print(*) \rightarrow \left| F(1) +print(*)\\F(1) +print(*) \right|\\\\F(3) +print(*)\rightarrow \left| F(1) +print(*)\\F(2) +print(*)\rightarrow \left| F(1) +print(*)\\F(1) +print(*)\right|\right|\\

Не по теме:

и не в падлу же мне было все это с LATEX рисовать же

zss
Модератор
Эксперт С++
6280 / 5883 / 1904
Регистрация: 18.12.2011
Сообщений: 15,093
Завершенные тесты: 1
26.01.2014, 18:35     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #3
Протестировал слегка измененный варант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
void F(int n)
{
    if (n>1)
        F(n/2);
    else
        return;
    F(n-1);
    printf("*");
}
int main(void)
{
    F(5);
    return 0;
}
Получилось 6 звездочек.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
26.01.2014, 18:36     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #4
Kill100
а я всё словестно писал )
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
26.01.2014, 18:37  [ТС]     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #5
Kill100

А почему все время printf c вызовом функции? он же только в конце напечатает, F(5) выполняется, дошел до F(2), запустилось F(2), потом из F(2) следующая функция он так долго будет идти до printf!

Вы правильный вариант кода написали, я скобки забыл
zss
Модератор
Эксперт С++
6280 / 5883 / 1904
Регистрация: 18.12.2011
Сообщений: 15,093
Завершенные тесты: 1
26.01.2014, 18:38     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #6
А Варинт Kill100 действительно выдает 13 звездочек
Kill100
386 / 252 / 34
Регистрация: 11.12.2010
Сообщений: 1,078
Завершенные тесты: 1
26.01.2014, 18:42     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #7
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
А почему все время printf c вызовом функции? он же только в конце напечатает, F(5) выполняется, дошел до F(2), запустилось F(2), потом из F(2) следующая функция он так долго будет идти до printf!
Оно то всегда выполнится
Просто принт будет не сразу в уже при возврате из рекурсии.
Почитайте как работает рекурсия. И заодно про стеки. Так попонятнее будет.
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
26.01.2014, 18:52  [ТС]     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #8
Но ведь функция не может закончиться (в моем понимании!)

Вот функция F(5), после оператора if вызывается F(2) и все соответственно в F(5) встало и ждет пока закончится F(2), а F(2) тоже встало, ведь там после оператора if вызовется F(1) и так далее...

Растолкуйте пожалуйста, запутался.
Kill100
386 / 252 / 34
Регистрация: 11.12.2010
Сообщений: 1,078
Завершенные тесты: 1
26.01.2014, 19:03     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #9
Тут как матрешка.
Примитивный пример. В реале всё чуть чуть сложнее
Вызывали F(5) зашли в неё ага 5>1 ложим в стек F(2), F(4),
пишем *, Извлекаем верхушку стека там F(4). Заходим в F(4), ага там вызываем F(2) и F(3) ложим их в стек, пишем *, итд. примерно так
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
26.01.2014, 19:13  [ТС]     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #10
а почему тогда, когда мы вызываем функцию в другой функции, сначала выполняется вызванная функция, а потом продолжается действие.
можете пожалуйста зарисовать? не очень понял с ваших слов. т.е. просто в F(5) F(2) и F(4) пропускаются, а потом компилятор снова к ним возвращается? или как?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 19:19     Определите, сколько звездочек будет напечатано в результате вызова функции F (5)
Еще ссылки по теме:
Какое значение будет выведено в результате выполнения последовательности операторов C++
Что будет выведено на экран в результате выполнения приведенного фрагмента кода? C++
C++ Добавить в начало и конец слова столько звездочек, сколько букв в этом слове
C++ Посчитать, сколько раз будет вызвана рекурсивная функция, если ей будет передан заданный аргумент
оформить решение в виде функции следующими способами: 1. функция расположена после ее вызова; 2. функция расположена после до ее вызова; 3. функ C++

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

Или воспользуйтесь поиском по форуму:
Kill100
386 / 252 / 34
Регистрация: 11.12.2010
Сообщений: 1,078
Завершенные тесты: 1
26.01.2014, 19:19     Определите, сколько звездочек будет напечатано в результате вызова функции F (5) #11
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
а потом компилятор снова к ним возвращается? или как?
Если упростить типа того.
Правда возвращается не компилятор а уже проц.
Кароче я не знаю как еще проще объяснить. Поиграйся с дебагером. Понаблюдай как будет выполняться все это по шагам
Yandex
Объявления
26.01.2014, 19:19     Определите, сколько звездочек будет напечатано в результате вызова функции F (5)
Ответ Создать тему
Опции темы

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