Рекурсия

vladis222

Active Member
06.12.2011
31
0
23
Украина
#1
Здравствуйте, еще проблема с лабораторной на рекурсию . У меня в методичке три колонки:
Вычисляемая ф-я:ln x/(x-1) Формулы по которым производится вычисление: y=сумма от 1 до бесконечности выр-я 1/k *x в ст k
Значения аргументов x=0,7 eps=0,01. Я написал код, но преподу не понравилось его запись, посмотрите пож-та



#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
float ynext(float n,int f)
{float sum(float n, int f);
float y;
y=sum(n,f+1);
printf("%f ",y);
return y;}
float ln (float n, int k,float eps)
{float ynext(float n,int f);
float y;
float sum(float n, int f);
y=sum(n,k);
printf("%f\n",y);
if ((ynext(n,k)-y)<eps)
return y;
else return ln(n,k+1,eps);
}
float sum(float n, int f)
{float s=0;
float z;
float g=0;
while (g!=f)
{z=(f);
s+=1/(z*pow(n,f));
g++;}
return s;
}
int main(void)
{float x;
float lg;
float eps;
setlocale(LC_ALL,"");
printf("Введите Х\n");
scanf_s("%f", &x);
printf("Введите точность измерений\n");
scanf_s("%f", &eps);
lg=ln(x,1,eps);
printf("ln(x/(x-1)) = %f",lg);
_getch();
}
 

vladis222

Active Member
06.12.2011
31
0
23
Украина
#4
#include<stdio.h>
#include<math.h>
#include<locale>
#include<conio.h>
float y(float x);
float next_y(float x,float yn);
{return (1/ (k*pow(x,k)));}
float ln (float x,float yn,float ynplus1,float eps)
{if(fabs(ynplus1-yn)<eps)
return (ynplus1);
else
return ( ln (x,ynplus1,next_y(x,ynplus1), eps));

float main_ln(float x,float eps)
{return (ln (x/(x-1),y0(x),next_y(x/(x-1),y0(x)),eps ));
}
main()
{float x,eps,y;
printf("Введите x : ");
scanf("%f",&x);
printf("И значение eps : ");
scanf("%f",&eps);
y=main_ln(x,eps);
}

В методичке нашей разобран пример определение функции корня квадратного из икса, и там похожий код, я написал такой для своей проги
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#5
Мне не понравилось что код программы не заключен в тэг С++ и отсутствуют отступы в блоках, из-за чего он становится нечитабельным.

А что собственно, нужно сделать в этой лабе?
Понятия не имею. Написано так что черт голову сломит. Перепиши толком, без сокращений, в формулах пробелы убери чтобы было понятно, заключи код в тэг С++, расставь отступы в блоках, а потом посмотрим что можно сделать.
Вычисляемая ф-я:ln x/(x-1) Формулы по которым производится вычисление: y=сумма от 1 до бесконечности выр-я 1/k *x в ст k
 

vladis222

Active Member
06.12.2011
31
0
23
Украина
#6
Таблица состоит из трех колонок. Первая колонка-название вычисляемой функции. У меня это- ln ( x/(x-1)).
Вторая колонка содержит формулы для вычисления вычисляемой функции. У меня это в моем случае сумма от k=1 до бесконечности от 1/(kx^k),[x^2>1]. В третьей значения аргументов x и eps.
 
R

rrrFer

Гость
#7
может быть оно и верно считает, но оформлено отвратно.
методичку выбрось
это не может работать:
Код:
#include<conio.h>
float y(float x);
float next_y(float x,float yn);
{return (1/ (k*pow(x,k)));}
и не стоит объявлять функции внутри других функций, это весьма запутывает, особенно если расставить фигурные скобочки как у вас )
 
A

Araneus

Гость
#9
У меня это в моем случае сумма от k=1 до бесконечности от 1/(kx^k),[x^2>1].

Эту фразу как понимать? У тебя что, там 2 интервала?

А вообще очень похоже на вычисление значения логарифма с помощью преобразования его функции в ряд Маклорена (или ряд Тейлора)

А Можешь засканировать/зафоткать условие и скинуть сюда?
 

vladis222

Active Member
06.12.2011
31
0
23
Украина
#10
У меня это в моем случае сумма от k=1 до бесконечности от 1/(kx^k),[x^2>1].

Эту фразу как понимать? У тебя что, там 2 интервала?

А вообще очень похоже на вычисление значения логарифма с помощью преобразования его функции в ряд Маклорена (или ряд Тейлора)

А Можешь засканировать/зафоткать условие и скинуть сюда?
Вот фотка. Мой вариант-19)) 261220112306_1_.jpg
 
A

Araneus

Гость
#11
Вот рабочий вариант, но рекурсией тут и не пахнет....
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
C++:
#include <iostream.h>
#include <conio.h>
#include <math.h>

float elem (int num, float arg)
{
return pow(arg,-num)/num;
}

void main ()
{
clrscr();
float x=0, acc, s=0;
cout << "Enter the value of argument in interval X<-1 or X>1:\n\t";
cin>> x;
cout << "\nEnter the accurancy of calculating:\n\t";
cin >> acc;

for (int i=1; elem(i,x) > acc; i++)
{
s+=elem(i,x);
}

cout << "Function ln(x/(x-1)) in point\t"<< x<< "\tis\t"<<s;
getch();

}
Над рекурсией еще думаю