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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jiton
2 / 2 / 1
Регистрация: 09.12.2008
Сообщений: 14
#1

Рекурсия. Не происходит обнуление - C++

13.06.2009, 21:14. Просмотров 561. Ответов 5
Метки нет (Все метки)

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
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
using namespace std;
#include <tchar.h>
#include "locale.h"
#include <ctype.h>
int int_protect();
 
double funct(int n)               //Рекурсивная функция
{
     static double x = 1;              //Переменные х и у имеют память типа static. При выходе из функции они не 
     static double y = 1;                 //уничтожаются. Т.е. при очередном входе функции x и у будут такими, какими они были при последнем выходе из функции 
     double result = x/(1+y);            //Формирование очередного значения суммы
     y = y+x;                                //Формирование x и y 
     x *= 0.3;
     if(n == 0)return 0;
     return result + funct(n-1);
}
 
int _tmain(int argc, _TCHAR* argv[])
{   
     char ch;
     int n;
     setlocale(LC_ALL,"Russian"); 
     printf("\n---------------------------------------------------------------------");
     printf("\n Пусть Х1=У1=1, Хi=0.3i-1, Yi=(Xi-1)+Yi-1. i=2,3,... ");
     printf("\n Дано натуральное n. Найти:");
     printf("\n E Xi/1+yi");
     printf("\n-------------------------------------------------------------");
 
    do
     {
          printf("\nВведите n:");          //Ввод данных
          n=int_protect();
          printf("\nResult: %3.15f", funct(n));
          printf("\n\nХотите произвести  еще одно вычисление?(Y/N)");
 
     do
     {
     ch=toupper(_getch());
 
     if( (ch=='Y')||(ch=='N') )
     printf("%c\n",ch);
     }
     while (ch!='Y' && ch!='N');
     }
     while (ch!='N');
 
_getch();
}
/////ФУНКЦИЯ ЗАЩИТЫ ТИПА INT////
int int_protect()
{
char a[3]={0},x=0;
int q=0, i=0;
do {
   x=_getch();
   if (x>=48 && x<=57 && i<3)
     {printf ("%c",x);
      a[i]=x;
      i++;}
   if (x==8 && i>=0)
     {printf ("%c %c",8,8);
      i--;
      a[i]=0;}
   q=atoi (a);
 }while (x!=13 || q==0 || i==0);
   return q;
}
Проблема в том, что не обновляються(если быть точнее не обнуляються) первоначальные данные Х и Y.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2009, 21:14     Рекурсия. Не происходит обнуление
Посмотрите здесь:

Обнуление переменной - C++
Здрасте. struct sItems { int ITEM_STRONG_LIFEPOWER; int ITEM_EXCELLENT_GENES; int ITEM_BOMB_SPECIALIST; int...

Обнуление переменной - C++
int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;rus&quot;); double A; int ik, in, h; cout &lt;&lt; setw(20) &lt;&lt; &quot;Задание 1&quot; &lt;&lt;...

Обнуление буфера. - C++
Доброе время суток! Есть например буфер &quot;b&quot;. Надо его перед использованием в цикле обнулять. Как это сделать? Вот часть кода,...

обнуление переменной - C++
Добрый день Господа !!! как обнулить переменную типа string Добавлено через 8 минут нашёл

Обнуление элементов матрицы - C++
Помогите решить задачу: Нужно заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале и вывести ее на экран....

Обнуление указателя в рекурсии - C++
Есть такой код: void split(tree* h, int ind, tree* l, tree* r) { if (h == NULL) { l = NULL; r = NULL; return; }

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Search..
Заказ софта
340 / 185 / 10
Регистрация: 26.05.2009
Сообщений: 863
13.06.2009, 21:37     Рекурсия. Не происходит обнуление #2
Оо, рекурсия это шняга жестокая...
rrrFer
Заблокирован
13.06.2009, 21:44     Рекурсия. Не происходит обнуление #3
вариант:
C++
1
2
3
4
5
6
7
double funct(int n,double x,double y){          //Рекурсивная функция
    double result = x/(1+y);    //Формирование очередного значения суммы
    y = y+x;                    //Формирование x и y 
    x *= 0.3;
    if(n == 0)  return 0;
    return result + funct(n-1,x,y);
}
Добавлено через 39 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
do{
        printf("\nВведите n:");          //Ввод данных
        n=int_protect();
        printf("\nResult: %3.15f", funct(n,1,1));
        printf("\n\nХотите произвести  еще одно вычисление?(Y/N)");
        do{
            ch=toupper(getch());
            if( (ch=='Y')||(ch=='N') )
                printf("%c\n",ch);
        }while (ch!='Y' && ch!='N');
    }
    while (ch!='N');
Даемоник
42 / 42 / 3
Регистрация: 22.05.2009
Сообщений: 97
13.06.2009, 21:57     Рекурсия. Не происходит обнуление #4
А можно объявить х и у глобально,т.е. после 11-ой строки написать:
C++
1
2
double y = 1;
double x = 1;
rrrFer
Заблокирован
13.06.2009, 22:01     Рекурсия. Не происходит обнуление #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
double funct(int n){            //Рекурсивная функция
    static double x = 1;           
    static double y = 1;
    double result = x/(1+y);    //Формирование очередного значения суммы
    y = y+x;                    //Формирование x и y 
    x *= 0.3;
    if(n == 0){
        x=y=1;
        return 0;
    }
    return result + funct(n-1);
}
так тоже можно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2009, 22:22     Рекурсия. Не происходит обнуление
Еще ссылки по теме:

Обнуление счетчика, сортировка - C++
Покажите пример , как можно вывести кол-во перестановок, которые были использованные при сортировке массива (любой можно). Там сделать ...

Обнуление столбцов матрицы - C++
Дана матрица (любой размерности), нужно последовательно сравнивать столбцы друг с другом. И если есть совпадающие элементы, то полностью...

Обнуление массива структур - C++
Создаю массив Elem * Head = new Elem; for (int i=0;i&lt;n;i++) { *(Head+i)= NULL; } cin &gt;&gt; numer; Пусть n будет 5 . то...

Обнуление матрицы в структуре - C++
Здравствуйте такой вопрос. Как обнулить двумерный массив который входитв структуру? struct player { int ships; int hits }; ...


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

Или воспользуйтесь поиском по форуму:
Jiton
2 / 2 / 1
Регистрация: 09.12.2008
Сообщений: 14
13.06.2009, 22:22  [ТС]     Рекурсия. Не происходит обнуление #6
Спасибо огромное
Yandex
Объявления
13.06.2009, 22:22     Рекурсия. Не происходит обнуление
Ответ Создать тему
Опции темы

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