2014 dxdy logo

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

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




 
 С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:24 
Аватара пользователя
почему то не работает
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя
Странно, должно работать, вывести 01 :-)

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


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

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 00:53 
Зачем Вам нужно это k?
Код:
void write(int n)
{
    if (n > 1)
        write(n-1);
    cout << n;
}

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:09 
Аватара пользователя
Вот так вообще в бесконечный цикл запускается.
Переменная 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 
g не обнуляется, но Ваша программа ее не изменяет, поэтому как была нулем, так нулем всю жизнь и остается.

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 01:17 
Аватара пользователя
Теперь работает, а разве в этом месте не изменялось 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 
Sverest в сообщении #590862 писал(а):
Теперь работает, а разве в этом месте не изменялось g?
Код:
cout << g+1 <<",";
Конечно, нет.
В этом месте было вычислено и распечатано значение g+1, само значение g осталось без изменений.
Вот если бы Вы написали
Код:
cout << ++g <<",";
тогда да, g изменилось бы.

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

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 14:59 
Maslov в сообщении #590865 писал(а):
Только тут эта g абсолютно лишняя.

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

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 15:03 
Аватара пользователя
Maslov в сообщении #590865 писал(а):
Только тут эта g абсолютно лишняя.


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

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение01.07.2012, 15:11 
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 
Maslov в сообщении #590986 писал(а):
Я уже писал как:

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

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

 
 
 
 Re: С++ рекурсивная функция выводящая 1,2,3,...,n
Сообщение03.07.2012, 20:39 
hurtsy в сообщении #591711 писал(а):
А какой размер памяти которая уйдет под стек?
Я думаю, на пару сотен тысяч чисел стека хватит :). Только тут это роли не играет: это ж явно абсолютно искусственная учебная задача на применение рекурсии.

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group