2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:24 
Аватара пользователя


17/12/10
538
почему то не работает
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
/*рекурсивная функция выводящая 1,2,3,...,n */

#include <iostream>
using namespace std;
void write (int);
int k=0;
int main()
{

   write(5);
system("pause");
   return 0;
}

void write (int n)
{
if (n==1 && k==0)
cout << 1;
else if (k<n)
{cout << k;
write(k+1);
}
}

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:38 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Странно, должно работать, вывести 01 :-)

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:48 
Аватара пользователя


17/12/10
538
Munin в сообщении #590852 писал(а):
Странно, должно работать, вывести 01 :-)


Но должно же быть $1, 2, 3, 4, 5$

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:53 
Заслуженный участник


09/08/09
3438
С.Петербург
Зачем Вам нужно это k?
Код:
void write(int n)
{
    if (n > 1)
        write(n-1);
    cout << n;
}

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:09 
Аватара пользователя


17/12/10
538
Вот так вообще в бесконечный цикл запускается.
Переменная g разве при каждом вызове обнуляется?
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <iostream>
using namespace std;
void write (int);
        int g=0;

int main()
{
       
   write(5);
system("pause");
   return 0;
}

void write (int n)
{

if (g < n)
{cout << g+1 <<",";
write(n);}

}

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:13 
Заслуженный участник


09/08/09
3438
С.Петербург
g не обнуляется, но Ваша программа ее не изменяет, поэтому как была нулем, так нулем всю жизнь и остается.

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:17 
Аватара пользователя


17/12/10
538
Теперь работает, а разве в этом месте не изменялось g?
Код:
cout << g+1 <<",";

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <iostream>
using namespace std;
void write (int);
        int g=0;

int main()
{
       
   write(5);
system("pause");
   return 0;
}

void write (int n)
{

if (g < n)
{cout << g+1 <<",";
g=g+1;
write(n);}

}
 

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:24 
Заслуженный участник


09/08/09
3438
С.Петербург
Sverest в сообщении #590862 писал(а):
Теперь работает, а разве в этом месте не изменялось g?
Код:
cout << g+1 <<",";
Конечно, нет.
В этом месте было вычислено и распечатано значение g+1, само значение g осталось без изменений.
Вот если бы Вы написали
Код:
cout << ++g <<",";
тогда да, g изменилось бы.

Только тут эта g абсолютно лишняя.

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 14:59 


01/07/08
836
Киев
Maslov в сообщении #590865 писал(а):
Только тут эта g абсолютно лишняя.

Можно спросить?
  1. Где это тут?
  2. Что такое абсолютно лишняя?
  3. Что выводить будем?
С уважением,

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 15:03 
Аватара пользователя


17/12/10
538
Maslov в сообщении #590865 писал(а):
Только тут эта g абсолютно лишняя.


Почему лишняя, а как на печать:$ 1, 2, 3, 4, 5$ вывести?

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 15:11 
Заслуженный участник


09/08/09
3438
С.Петербург
Sverest в сообщении #590984 писал(а):
Почему лишняя, а как на печать:$ 1, 2, 3, 4, 5$ вывести?
Я уже писал как:
Maslov в сообщении #590854 писал(а):
Код:
void write(int n)
{
    if (n > 1)
        write(n-1);
    cout << n;
}

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение03.07.2012, 19:22 


01/07/08
836
Киев
Maslov в сообщении #590986 писал(а):
Я уже писал как:

Действительно, абсолютно лишняя. А какой размер памяти которая уйдет под стек? :? С уважением

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение03.07.2012, 19:47 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Стандартный frame вызова функции (с результатом void) + 1 параметр int, на каждый рекурсивный вызов.

 Профиль  
                  
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение03.07.2012, 20:39 
Заслуженный участник


09/08/09
3438
С.Петербург
hurtsy в сообщении #591711 писал(а):
А какой размер памяти которая уйдет под стек?
Я думаю, на пару сотен тысяч чисел стека хватит :). Только тут это роли не играет: это ж явно абсолютно искусственная учебная задача на применение рекурсии.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group