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

Комбинаторика! Число сочитаний - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Цикл http://www.cyberforum.ru/cpp-beginners/thread634878.html
Начал изучать C++ неделю назад. Теперь начал решать некоторые задачи. И возникли у меня некоторые сложности с циклами... Требуется ваша помощь... Задача: Переведите натуральное число из двоичной системы в десятичную (в двоичном числе не более 10 цифр). Решение: #include <iostream> using namespace std;
C++ Работа с фс Всем привет, мне необходимо посчитать количество файлов в директории и в зависимости от их количества разделить их на 4 или 8 папок. Я слышала есть библиотеки fstream и boost, но как правильно это сделать я так и не поняла. http://www.cyberforum.ru/cpp-beginners/thread634869.html
Конструктор копирования C++
Всем привет. У меня такая проблема: есть некий класс, допустим Test: class Test { protected: int value; public : Test(int v)
Случайные(псевдослучайные) числа C++
Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же. Возникла у меня проблема с получением большого кол-ва случайных(точнее псвдослучайных) чисел, которые меньше 10.Я прекрасно знаю про функцию rand() % 10, и знаю то, что ПЕРЕД ней надо юзать функцию srand().Но вот в чём прикол.Я всегда юзал srand(time(NULL)) в паре с rand() % 10, но при генерации более 1 числа...
C++ Ошибка при вызове функции http://www.cyberforum.ru/cpp-beginners/thread634834.html
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же потом не выводится элементы объекта класса words и ID в программе на данный момент вызываются лишь 2 функции,которые я привёл #ifndef DICTIONARY_H #define DICTIONARY_H #include "StdAfx.h" class Dictionary { public:
C++ генерирую случайные числа srand(time(NULL)); rand()%10; Всем привет, генерирую случайные числа, подскажите, пожалуйста, почему при запуске приложения числа постоянно генерируются? Как можно сделать так, чтобы при каждом запуске приложение выводило только одно число? Спасибо большое! подробнее

Показать сообщение отдельно
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
13.08.2012, 05:31     Комбинаторика! Число сочитаний
Цитата Сообщение от mr_free Посмотреть сообщение
Да, и еще почему в данных задачах не стоит использовать рекурсию?
Стека жрёт много. Смотрим количество сочетаний без возврата и без учёта порядка. Рекурсия+ цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <windows.h>
#include <stdio.h>
#define kolichestvo_chisel 9
#define kolichestvo_drugih_chisel 7
using namespace std;
 
int kk= 0;
 
 
 
void func_recurs (int nomer_funktsii, int nomer_elementa, int kol_ostavshihsa_chisel,  int* stroka, int* array) {
 
 printf ("%x\n", &nomer_funktsii);
 kk++;
 
 for (int i= nomer_elementa; i< kolichestvo_chisel- kol_ostavshihsa_chisel+ 1; i++) {
 
  if (nomer_funktsii< kolichestvo_drugih_chisel- 1) {
   array [nomer_funktsii]= stroka [i];
   for (int j= 0; j< kk; j++)
    printf (" ");
   func_recurs (nomer_funktsii+ 1, i+ 1, kol_ostavshihsa_chisel- 1, stroka, array);
  }
 
  else {
   array [nomer_funktsii]= stroka [i];
//   for (int i= 0; i< kolichestvo_drugih_chisel; i++)
//    printf ("%d ", array [i] );
//    printf ("\n");
  }
 }
 
 kk--;
}
 
 
int main () {
 
 int stroka []= {21, 34, 20, 12, 3, 2, 7, 67, 56};
 int array [kolichestvo_drugih_chisel];
 func_recurs (0, 0, kolichestvo_drugih_chisel, stroka, array);
 
 
 
 getchar ();
 return 0;
}
И вывод смотри, эти ступеньки- эта глубина рекурсии. И как видишь, углубление происходит всё дальше и дальше в стек и однажды он переполнится (вправо по ступенькам)
...Я сделал, чтобы глубина рекурсии была не больше kolichestvo_drugih_chisel. Это фигня, это очень мало. Стек не переполнится. Но ведь это я СДЕЛАЛ. (Видишь, использовал ЦИКЛ+ рекурсию). А можно было бы и не сделать, обойтись одной рекурсией и пиши пропало, ступеньки вылетели бы туда непонятно куда и крах программы.

И да, время отладки она вылетала у меня не раз и не два из-за переполнения стека (ошибка трудноуловимая). А если ты вместо рекурсии используешь цикл, одной проблемой меньше.
Миниатюры
Комбинаторика! Число сочитаний  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru