Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения https://www.cyberforum.ru/ cpp-beginners/ thread1263281.html
написать программу, использующую функцию которая выводит на экран таблицу значений выражения 2^n+1,n=\bar{10,0} . Функция возвращает результат вычисления последнего выражения. Для вычислений...
Перевод из C++ на PureBasic C++
В общем, написал в свой раздел, там никто ничего не говорит толкового. Решил обратиться сюда Задача такая: Как можно подробнее описать, что делается в коде. В общем, прокомментировать #include ...
Конструкторы ofstream и стандарт C++11 и компилятор gcc необходимо разобраться C++
Друзья! Условимся, что компилятор g++ поддерживает этот стандарт, ибо ошибок, говорящих об обратном не замечено вроде. //main.cpp #include <fstream> using namespace std; int main() { ...
C++ Не сохраняется адрес переменной Передаю в функцию адресс переменной, на выходе из функции, адрес остаётся прежний, и я непоймк почему.. bool WinFS::fread( LPVOID buf ){ wcout<<L" &text - "<<&buf<<L" || text - "<<buf<<" ||... https://www.cyberforum.ru/ cpp-beginners/ thread1263270.html
C++ Класс "Стационарный телефон", реализовать заданные методы https://www.cyberforum.ru/ cpp-beginners/ thread1263251.html
стационарный телефон свойства: • состояние линии (сигнал присутствует / отсутствует); • состояние трубки (на базе / поднятий); • уровень громкости (0 ... 3); • наличие гудка (отсутствует /...
C++ Составить для программы блок-схему
Помогите пожалуйста составить блок-схему, а то не умею их делать. 1) Определить, попадает ли точка с заданными координатами в полукруг радиусом R, расположенный в I и IV четверти. (Уравнение...
C++ Нелинейные уравнения
Подскажите пожалуйста, выдает ошибку в 3ей строке снизу, в чем она заключается? #include<math.h> #include<conio.h> #include<stdio.h> float funkcia (float x){ float y; ...
C++ Нужно заменить функцию в программе Нужно убрать функцию,Help Me Please:cry: #include <iostream> #include <fstream> #include <windows.h> #include <conio.h> using namespace std ; /* //Это функция проверки на разделитель,нужно... https://www.cyberforum.ru/ cpp-beginners/ thread1263181.html
C++ В зависимости от введенного числа определить его тип и провести дальнейшие действия с ним https://www.cyberforum.ru/ cpp-beginners/ thread1263146.html
Не знаю, правильно или нет выразился.... В общем, нужно ввести переменную(число), в зависимости от введенного числа определить его тип и провести дальнейшие действия с ним на основании типа...
C++ Ctrl+Z или Как закончить ввод с консоли? Не получается найти ошибку #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define STACKSIZE 50 int stackPTR = 0; https://www.cyberforum.ru/ cpp-beginners/ thread1263143.html
4193 / 1785 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
26.09.2014, 17:01  [ТС] 0

Ошибки: Неуместная рекурсия при вычислении миноров

26.09.2014, 17:01. Просмотров 1633. Ответов 45
Метки (Все метки)

Ответ

Цитата Сообщение от Voivoid Посмотреть сообщение
Это проблема твоей реализации, а не рекурсии
Рекурсия всегда расходует память для каждого параметра каждого вызываемого экземпляра подпрограммы. Иначе нельзя разделить локальные данные разных экземпляров и рекурсия становится невозможной. Не важно как именно вы реализуете рекурсию, подпрограмма одна и та же, значит имена данных не меняются, но при этом каждый следующий экземпляр вызывается именно для того, чтоб работать с независимыми данными. Даже при рекурсивном поиске в дереве
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
TNode *Search(TNode *p, int Data)
{
 TNode *t;
 if (p-Data==Data)
 {
  return p;
 }
 if (p->Left!=NULL)
 {
  t=Search(p->Left, Data);
  if (t!=NULL)
  {
   return t;
  } 
 }
 if (p->Right!=NULL)
 {
  t=Search(p->Right, Data);
  if (t!=NULL)
  {
   return t;
  } 
 }
 return NULL;
}
рекурсия применяется именно для того, чтоб в каждом экземпляре функции иметь независимую текущую позицию в дереве и независимый от остальных экземпляров параметр, эту позицию отмечающий. Дерево во всех экземплярах общее, да не совсем, в первом экземпляре это всё дерево, во втором уже его левое поддерево, в третьем - его левое поддерево и так далее, в экземпляре, следующем за завершением второго, деревом будет уже правое поддерево всего дерева, а ещё в следующем - его левое поддерево, а в последнем экземпляре дерево оказывается вырождено в крайний правый лист всего дерева. Параметр Data везде одинаков, но если не меняется ни один параметр, то рекурсия бесконечна. И без параметров рекурсия тоже бесконечна. Кроме того, всякая рекурсия расходует память ещё и на отдельный адрес возврата для каждого экземпляра. Ну пусть при каждом вызове хвостовой рекурсии освобождается память предыдущего экземпляра. Но здесь то хвостовая не получится из-за множественных вызовов себя из каждого экземпляра. И заметь: я не критикую рекурсию как таковую, а лишь привёл пример, в котором она не уместна. Когда рекурсивны данные, то попытка сочинить не рекурсивный алгоритм приведёт лишь к ненужному усложнению и снижению качества результата. Но рекурсия на ровном месте - это именно то, чего делать не надо. Знать её обязательно. Но применять следует только в некоторых случаях.

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
Учите мат. часть.
Вот Вы и учите.
Цитата Сообщение от Ilot Посмотреть сообщение
taras atavin, вы передаете a по значению, а не ссылке и поэтому происходит неявное приведение к типу указатель
Передача по значению - это именно передача оригинала по значению безо всяких приведений к указателям. Там же имеет место передача по указателю.

Вернуться к обсуждению:
Ошибки: Неуместная рекурсия при вычислении миноров
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2014, 17:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибки при вычислении интегралов
Здравствуйте! Решаю следующую задачу по тер вер.: есть совместная плотность случайных величин...

Ошибки при вычислении выражения
Народ, я в затупке, что я не так делаю вот код Public Class Form1 Private Sub...

Найти ошибку(ошибки) при вычислении суммы
функция y=\frac{\left( {S}^{3}+0.01n\right)}{S+3} s=m\sum_{k=1}^{20}\frac{1}{{k}^{2}} ...

При вычислении функции arccos и преобразовании её в arctg возникают ошибки.
Надо вычислить. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #define sqr(t) ((t) *...

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