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

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

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

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

26.01.2014, 17:26. Просмотров 2556. Ответов 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?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определите, сколько звездочек будет напечатано в результате вызова функции F (5) (C++):

Что будет вызвано в результате вызова f()? - C++
Дан код со следующим определением класса A: struct A { void f() {/* метод 1*/} void f(int x) {/* метод 2*/} void...

Не понимаю текста программы. Что будет напечатано в результате программы? И что вообще происходит в программе? - C++
class B { int x; B (int a=0) { x = a; cout « 1; } -B () { cout « 3; } }; class D : B { D (int d ) : B (d) {...

Каким будет значение переменной k после вызова функции f в main: - C++
void f(int &a) { a++; } int main() { int k = 0; f(k); }

то будет выведено в результате работы алгоритма? - C++
Помогите решить пожалуйста: Алгоритм записан как некая "солянка". На вход подается строка "ALL OUR LIFE IS A GAME". Считаем, что...

Что будет в переменных в результате выполнения кода? - C++
программный код: int z=6, x=-2, y=4; z+=y=5+x--; Что будет в переменных в результате выполнения?

Какое значение будет выведено в результате работы программы? - C++
#include <iostream> using namespace std; int main() { int k = 0; for (int i = 2; k * k < 10; i < 3, k++, k--) { k += 1; } ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,155
Завершенные тесты: 1
26.01.2014, 18:29 #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 рисовать же

1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
26.01.2014, 18:35 #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 звездочек.
1
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
26.01.2014, 18:36 #4
Kill100
а я всё словестно писал )
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
26.01.2014, 18:37  [ТС] #5
Kill100

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

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

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

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

Определить, что будет выдано на терминал в результате выполнения программы - C++
Помогите ответить на вопрос Определить, что будет выдано на терминал в результате выполнения программы: #include&lt;iostream.h&gt;...

Какое значение будет выведено в результате выполнения последовательности операторов - C++
Помогите ответить на вопрос: Какое значение будет выведено в результате выполнения последовательности операторов cin &gt;&gt; x&gt;&gt;y; z=sqrt(...

Какой результат будет получен в результате выполнения этого кода? - C++
В программе выполнены следующие описания: class A { protected: int a; public: A(int ax){ a = ax;} void print(){cout &lt;&lt; a &lt;&lt;...

Что будет выведено на экран в результате выполнения приведенного фрагмента кода? - C++
Что будет выведено на экран в результате выполнения приведенного фрагмента кода? int n = 1; while (n&lt;=10) { if (n%2) ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.01.2014, 19:19
Ответ Создать тему
Опции темы

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