0 / 0 / 1
Регистрация: 24.02.2018
Сообщений: 38
1

Рекурсивная функция

03.04.2018, 17:42. Показов 1450. Ответов 10
Метки нет (Все метки)

Пожалуйста как сделать рекурсию функции my_ln?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main() 
{ 
setlocale(LC_ALL, "Russian_Russia.1251"); 
double y1, y2, x, sa; 
int i = 0; 
int n; 
printf("Введите последовательность n"); 
cin » n; 
printf("Введите x:"); 
scanf("%lf", &x); 
while (i<n) 
{ 
i++; 
y2 += my_ln(x, i); 
} 
printf("x= %6.2lf  ln=%lf\n ", x, y2); 
getch(); 
return 0; 
}
C++
1
2
3
4
5
6
7
8
double my_ln(double x,int i) 
{ 
double as; 
if (i == 0) 
return 1; 
as += (i % 2 == 0 ? -1 : 1) * pow(x, i) / i); 
return as; 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2018, 17:42
Ответы с готовыми решениями:

Рекурсивная функция C++
Сосчитать f(y)=3y+5, yk - входное данное.

Рекурсивная функция C++
Здравствуйте ,помогите реализовать этот пример с помощью рекурсии с++

Рекурсивная Функция
Функция

Рекурсивная функция
Добрый день. Мне необходимо составить рекурсивную и нерекурсивную функцию для следующей задачи:...

10
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 17:54 2
Приведённый вами код не компилируется. Лишняя (или недостающая) круглая скобка в 6 строке функции my_ln.

Неплохо было бы знать что должна делать функция.
0
0 / 0 / 1
Регистрация: 24.02.2018
Сообщений: 38
03.04.2018, 18:05  [ТС] 3
фун log(1+x)
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
 
 
using namespace std;
 
double my_ln(double x, int i);
int main()
{
    setlocale(LC_ALL, "Russian_Russia.1251");
    double y1, y2, x, sa;
    int i = 0;
    int n;
    printf("Введите  последовательность n");
    cin >> n;
    printf("Введите  x:");
    scanf("%lf", &x);
    while (i<n)
    {
        i++;
        y2 += my_ln(x, i);
    }
    printf("x= %6.2lf   ln=%lf\n ", x, y1, y2);
    getch();
    return 0;
}
double my_ln(double x,int i)
{
    double as;
    if (i == 0)
        return 1;
    as += (i % 2 == 0 ? -1 : 1) * pow(x, i) / i);
    return as;
}
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 18:33 4
Mirzoev, ваш код не компилируется.
Цитата Сообщение от MrGluck Посмотреть сообщение
Лишняя (или недостающая) круглая скобка в 37 строке в функции my_ln.
0
0 / 0 / 1
Регистрация: 24.02.2018
Сообщений: 38
03.04.2018, 18:37  [ТС] 5
Очень странно

у меня без ошибок,создал clr проект(консольное)
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
 
 
using namespace std;
 
double my_ln(double x, int i);
int sumfun(int x, int sa);
 
int main()
{
    setlocale(LC_ALL, "Russian_Russia.1251");
    double y1, y2, x, sa;
    int i = 0;
    int n;
    printf("Введите  последовательность n");
    cin >> n;
    printf("Введите  x:");
    scanf("%lf", &x);
    while (i<n)
    {
        i++;
        y2 += my_ln(x, i);
    }
    y1=sumfun(x, sa);
    printf("x= %6.2lf  summa=%lf\n ln=%lf\n ", x, y1, y2);
    getch();
    return 0;
}
double my_ln(double x,int i)
{
    double as;
    if (i == 0)
        return 1;
    as += (i % 2 == 0 ? -1 : 1) * pow(x, i) / i;
    return as;
}
 
int sumfun(int x, int sa)
{
    int y;
    while (x != 0) {
        y = x % 10;
        x = (x - y) / 10;
        sa = sa + y;
    }
    return sa;
}
Добавлено через 39 секунд
MrGluck,
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 18:41 6
Цитата Сообщение от Mirzoev Посмотреть сообщение
у меня без ошибок,создал clr проект(консольное)
Так потому что вы выкладываете не то, что компилируете у себя. В коде на форуме вы круглую скобку перед ; ставили.
0
0 / 0 / 1
Регистрация: 24.02.2018
Сообщений: 38
03.04.2018, 18:43  [ТС] 7
все понял ошибку.
так как сделать рекурсию?)
MrGluck,
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 18:51 8
Mirzoev, у вас переменные as, sa и y2 используется без инициализации. Вы предполагаете, что там должен быть 0?
0
Модератор
Эксперт С++
12460 / 10018 / 6031
Регистрация: 18.12.2011
Сообщений: 26,824
03.04.2018, 18:53 9
Лучший ответ Сообщение было отмечено MrGluck как решение

Решение

Если Вы имели ввиду рекуррентно, то так (работает для любых x>0):
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
double my_ln (double x)
{
    const double eps=1e-6;
 
    const double lnln=M_LN2; //ln2
    int k=0;
    while(x>2.0)
    { 
        x/=2.0;
        k++;
    }
    x-=1.;
    double s=0;
    int n=1;
    double an=x;
    while (fabs(an)>eps)
    {
        s+=an;
        ++n;
        an*=-x*(n-1)/n;
    }
    s+=k*lnln;
    return s;
}
Рекурсивно будет примерно так (0<x<2):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double my_ln (double x,int n)
{
    static double s=0;
    static double an;
    const double eps=1e-6;
    if(fabs(an)<eps)
       return s;
    if(n==1)
    {
        an=x;
        s=0;
     }else
     {
        s+=an;
        an*=-x*(n-1)/n;
     }
     return my_ln (x,n+1);
}
0
0 / 0 / 1
Регистрация: 24.02.2018
Сообщений: 38
03.04.2018, 19:29  [ТС] 10
MrGluck, да

Добавлено через 1 минуту
это рекурсия функции ?
мне нужно чтоб функция вызывает саму себя

Добавлено через 34 минуты
zss,
не поможете с этой фун?
C++
1
2
3
4
5
6
7
8
9
10
int sumfun(int x, int sa)
{
    int y;
    while (x != 0) {
        y = x % 10;
        x = (x - y) / 10;
        sa = sa + y;
    }
    return sa;
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33188 / 18511 / 3903
Регистрация: 12.02.2012
Сообщений: 31,088
Записей в блоге: 12
03.04.2018, 20:09 11
Вот рекурсивное решение:

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
#include <stdio.h>
#include <stdlib.h>
 
 
double r_log(double x, double a, double n, double eps) // рекурсивная ф-ция
{
   double aa;    
   if (fabs(a) <= eps) return a;
   aa=(-a*x);
   return (a/n)+r_log(x,aa,(n+1),eps);      
}       
 
double my_log(double x, double eps) // ф-ция оболочка для легкого вызова
{
    return r_log(x,x,1.0,eps);
}       
 
int main(int argc, char *argv[])
{
  double x;
  for (x=0.1; x<1 ; x+=0.05)
    printf("%lf %lf %lf\n",x,my_log(x,1.0e-8),log(1+x)); 
  system("PAUSE");  
  return 0;
}
Вывод:

Код
0.100000 0.095310 0.095310
0.150000 0.139762 0.139762
0.200000 0.182322 0.182322
0.250000 0.223144 0.223144
0.300000 0.262364 0.262364
0.350000 0.300105 0.300105
0.400000 0.336472 0.336472
0.450000 0.371564 0.371564
0.500000 0.405465 0.405465
0.550000 0.438255 0.438255
0.600000 0.470004 0.470004
0.650000 0.500775 0.500775
0.700000 0.530628 0.530628
0.750000 0.559616 0.559616
0.800000 0.587787 0.587787
0.850000 0.615186 0.615186
0.900000 0.641854 0.641854
0.950000 0.667829 0.667829
Для продолжения нажмите любую клавишу . . .
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2018, 20:09
Помогаю со студенческими работами здесь

Рекурсивная функция
Как мне оформить в рекурсивную функцию? Напишите код пожалуйста, буду благодарен)) #include...

Рекурсивная функция!
нужна помощь, как вычислить а в степени n, т.е написать программу использую две функции рекурсивную...

рекурсивная функция
Составить программу с рекурсивною функцией n!+m! де n=4,m=6.

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru