Помогите С Задачей На Рекурсию С++

Тема в разделе "C/C++/C#", создана пользователем doompochta, 21 мар 2013.

Статус темы:
Закрыта.
  1. doompochta

    doompochta New Member

    Регистрация:
    21 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Найти значение выражения, используя рекурсию:
    T[sub]0[/sub](x)=1, T[sub]1[/sub](x)=x, T[sub]k+1[/sub](x)=2*x*T[sub]k[/sub](x)-T[sub]k-1[/sub](x) для k>=2

    Программа выдает ошибку сегментации для k>=2, первый раз имею дело с рекурсией, может не так понимаю условие задачи? помогите разобраться:

    Код (Text):
    #include<iostream.h>

    float tn(float, int);

    int main()
    {

    int b;
    float c,d;

    cout<<"vvedite x"<<endl;
    cin>>c;
    cout<<"vvedite k"<<endl;
    cin>>b;

    d=tn(c,b);
    cout<<d<<endl;

    system("pause");
    return 0;
    }

    float tn(float x, int k)
    {
    float a;

    if (k==0) a=1;
    else if (k==1) a=x;
    else if (k>=2) a=2*x*tn(x,k)-tn(x,k-1);

    return a;
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    оно стопудово зациклится,
    из функции f(1,2) вы вызываете опять f(1,2) и так до бесконечности.

    Надо обратить внимание на то, что в левой части вашего выражения стоит T(k+1) = ... , но вы написали как будто T(k)

    Я думаю, надо взять вот то выражение и выразить из него T(k), препод над Вами издевается :)

    а так, все почти правильно :)

    только код ваш я бы чуть переписал, некрасивые else режут глаза.


    Код (Text):
    float f(float x, int k) {  
    if (k==0) return 1;
    if (k==1) return x;
    return ... //что-то там
    }
     
  3. doompochta

    doompochta New Member

    Регистрация:
    21 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Выразил tn(x,k):
    Код (Text):
    float tn(float x, int k)
    {

    if (k==0) return 1;
    if (k==1) return x;
    return (tn(x,k+1)+tn(x,k-1))/(2*x);
    }
    Однако, ошибка осталась(
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    f (1, 3) вызовет f (1, 2) и f (1, 4)
    f (1, 2) вызовет f (1, 1) и f (1, 3)
    => цикл
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    считать все-таки надо T(k+1) :)

    можно вывести более нормальную формулу. Посчитайте на бумаге как должна работатьпрограмма, легко найдете закономерность. Но можно и так написать:
    Код (Text):
    #include<iostream>

    float tn(float, int);
    float f(float, int);

    int main() {
    std::cout << f(3.f, 4) << std::endl;
    }

    float f(float x, int k) {
    return tn(x, k - 1);
    }

    float tn(float x, int k) {
    if (0 == k)
    return 1;
    if (1 == k)
    return x;
    return 2 * x * tn(x, k - 1) - tn(x, k - 2);
    }
     
Загрузка...
Похожие Темы - Помогите Задачей На
  1. Jenyyy
    Ответов:
    0
    Просмотров:
    799
  2. likan
    Ответов:
    1
    Просмотров:
    1.070
  3. dog2552
    Ответов:
    2
    Просмотров:
    1.145
  4. viktor2014
    Ответов:
    0
    Просмотров:
    1.152
  5. Comoc
    Ответов:
    0
    Просмотров:
    930
Статус темы:
Закрыта.

Поделиться этой страницей