Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 3
1

рекурсия B c++

18.09.2011, 17:19. Показов 707. Ответов 5
Метки нет (Все метки)

пожалуйста помогите,почему не работает?
дело в рекурсии,функция func1 вызывается много раз..

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 int func1 (float A[z][z],float B[z][z],float C[z][z],int N){ 
 
      int m;
      float P7[q][q],P6[q][q],P5[q][q],P4[q][q],P3[q][q],P2[q][q],P1[q][q],
      B11[q][q],B12[q][q],B21[q][q],B22[q][q],A11[q][q],A12[q][q],A21[q][q],A22[q][q],
      Asum1[q][q],Asum2[q][q],Asum5[q][q],Asum6[q][q],Asum7[q][q],
      Bsum1[q][q],Bsum3[q][q],Bsum4[q][q],Bsum6[q][q],Bsum7[q][q];
      
/////////////////////////////////////////////////////////////
  
    m=N/2;
 
    
     for(int i = 0;  i< m; ++i){
      for(int j = 0; j < m; ++j){
      (A11)[i][j]=0;
      (A11)[i][j]+=(A)[i][j];
      (A12)[i][j]=0;
      (A12)[i][j]+=(A)[i][j+m];
      (A21)[i][j]=0;
      (A21)[i][j]+=(A)[i+m][j];
      (A22)[i][j]=0;
      (A22)[i][j]+=(A)[i+m][j+m];}}
 
 
      for(int i = 0;  i< m; ++i){
      for(int j = 0; j < m; ++j){
      (B11)[i][j]=0;
      (B11)[i][j]+=(B)[i][j];
      (B12)[i][j]=0;
      (B12)[i][j]+=(B)[i][j+m];
      (B21)[i][j]=0;
      (B21)[i][j]+=(B)[i+m][j];
      (B22)[i][j]=0;
      (B22)[i][j]+=(B)[i+m][j+m];}}
      
      
     for(int i = 0;  i< m; ++i){
      for(int j = 0; j < m; ++j){
        
      Asum1[i][j]+=A11[i][j]+A22[i][j];      
     Bsum1[i][j]+=B11[i][j]+B22[i][j];
      
      Asum2[i][j]+=A21[i][j]+A22[i][j];
      
      Bsum3[i][j]+=B12[i][j]-B22[i][j];
      
      Bsum4[i][j]+=B21[i][j]-B11[i][j];
      
      Asum5[i][j]+=A11[i][j]+A12[i][j];
      
      Asum6[i][j]+=A21[i][j]-A11[i][j];
       Bsum6[i][j]+=B11[i][j]+B12[i][j];
       
        Asum7[i][j]+=A12[i][j]-A22[i][j];
        Bsum7[i][j]+=B21[i][j]+B22[i][j];}}
        
        
        if(m<2){   
           
                func2(Asum1,Bsum1,P1,m);
                func2(Asum2,B11,P2,m);
                func2(A11,Bsum3,P3,m);
                func2(A22,Bsum4,P4,m);
                func2(Asum5,B22,P5,m);
                func2(Asum6,Bsum6,P6,m);
                func2(Asum7,Bsum7,P7,m);
                int i;
                for( i=0;i<m;i++){
                for(int j=0;j<m;j++)         
                for(int k=0;k<m;++k) {  
                (C)[i][j]=P1[i][k]+P4[i][k]+P7[i][k]-P5[i][k];
                (C)[i][j+m]=P3[i][k]+P5[i][k];
                (C)[i+m][j]=P2[i][k]+P4[i][k];
                (C)[i+m][j+m]=P1[i][k]-P2[i][k]+P3[i][k]+P6[i][k];}}
                }  
                   
   
                else{ 
                
                          
          return func1(Asum1,Bsum1,P1,m);
          return func1(Asum2,B11,P2,m);
         return func1(A11,Bsum3,P3,m);
         return func1(A22,Bsum4,P4,m); 
         return func1(Asum5,B22,P5,m); 
         return func1(Asum6,Bsum6,P6,m); 
         return func1(Asum7,Bsum7,P7,m);
         int i;
                for( i=0;i<m;i++){
                for(int j=0;j<m;j++)         
                for(int k=0;k<m;++k) {  
                (C)[i][j]=P1[i][k]+P4[i][k]+P7[i][k]-P5[i][k];
                (C)[i][j+m]=P3[i][k]+P5[i][k];
                (C)[i+m][j]=P2[i][k]+P4[i][k];
                (C)[i+m][j+m]=P1[i][k]-P2[i][k]+P3[i][k]+P6[i][k];}}
         }
                
       
                
               
        
        
      
                   
        
    ofstream oos;
    oos.open("rezultatai.txt");
    oos<<"C:\n"<<endl;                                                                
    for(int i=0;i<kiek;i++){
    oos<<endl<<endl;
    for(int j=0;j<kiek;j++){
    oos<<"["<<setw(2)<<C[i][j]<<setw(2)<<"]";}}
    oos.close();
    
//////////////////////////////////////////////////
 
}      
 
    int func2 (float A[z][z],float B[z][z],float C[z][z],int N){ 
         
    for(int i=0;i<N;++i)
    for(int j=0;j<N;++j){
  
     C[i][j]=0;
     for(int k=0;k<N;++k)
     C[i][j]+=A[i][k]*B[k][j];}
     
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2011, 17:19
Ответы с готовыми решениями:

Рекурсия
Не совсем разобрался с заданиями помогите!

Рекурсия
Привет, помогите пожалуйста надо вычислить рекурсивную функцию :...

Рекурсия: возведение числа в целую степень
Сделайте одну програмку используя рекурсию. Очень нужно... Срочно. 1. Реализовать поиск НОД; ...

Рекурсия, почему есть ограничение на входные данные
Сегодня баловался с рекурсией. получилось типа цикла, только из функции #include &lt;iostream&gt;...

5
Уничтожитель печенек
281 / 209 / 49
Регистрация: 07.02.2010
Сообщений: 724
18.09.2011, 17:37 2
Ну
Цитата Сообщение от антон1986 Посмотреть сообщение
else{
return func1(Asum1,Bsum1,P1,m);
return func1(Asum2,B11,P2,m);
return func1(A11,Bsum3,P3,m);
return func1(A22,Bsum4,P4,m);
return func1(Asum5,B22,P5,m);
return func1(Asum6,Bsum6,P6,m);
return func1(Asum7,Bsum7,P7,m);
int i;
for( i=0;i<m;i++){
for(int j=0;j<m;j++)
for(int k=0;k<m;++k) {
(C)[i][j]=P1[i][k]+P4[i][k]+P7[i][k]-P5[i][k];
(C)[i][j+m]=P3[i][k]+P5[i][k];
(C)[i+m][j]=P2[i][k]+P4[i][k];
(C)[i+m][j+m]=P1[i][k]-P2[i][k]+P3[i][k]+P6[i][k];}}
}
Вызовится первый return, остальные не будут учитываться.

Не по теме:

Ну ничего же себе, вы нагородили :)

0
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 3
18.09.2011, 18:08  [ТС] 3
да и без ретурнов не очень работает,плохой ответ даёт..
0
Заблокирован
18.09.2011, 18:56 4
Сформулируйте исходную задачу.
А то что-то код "попахивает".
0
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 3
18.09.2011, 19:07  [ТС] 5
я новичок и не понимаю как сделать так, чтобы код работал. Уже столько просидел и толку - нoль.
0
Эксперт С++
5820 / 3472 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
18.09.2011, 19:11 6
Цитата Сообщение от антон1986 Посмотреть сообщение
я новичок и не понимаю как сделать так, чтобы код работал. Уже столько просидел и толку - нoль.
Цитата Сообщение от IrineK Посмотреть сообщение
Сформулируйте исходную задачу.
опиши, что должна делать твоя программа (подробно и, желательно, без пунктуационных и орфографических ошибок). По твоему коду это понять нельзя.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2011, 19:11

Как работает рекурсия? Нужны комментарии
Вот какой самый простой пример рекурсии я обнаружил в интернете: #include &lt;iostream&gt; using...

Будет ли итеративная функция значительно быстрее рекурсивной?
Вопрос не по коду. Вот есть у меня рекурсивная функция, глубина рекурсии достигает 10 в среднем....

Рекурсия: убрать ограничение, требующее, чтобы аргумент был неотрицательным
Доброго времени суток. Уважаемые ГУРУ, есть одна проблема. Ниже представлен код, в котором параметр...

Рекурсия: вычисление функции по формуле
Помогите пожалуйста сделать рекурсию Даны n и m, найти X и Y, при X1=Y=1 X=X+Y/i^2 Y=Y=X/i^2

Рекурсия: найти первый член последовательности, для которой выполняется неравенство
Помогите написать рекурсию. Задание прилагаю

Рекурсия
Помогите написать функцию которая будет считать эту рекуррентную формулу с помощью рекурсии


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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