1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем doompochta, 21 мар 2013.

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

    doompochta New Member

    Репутация:
    0
    Регистрация:
    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, первый раз имею дело с рекурсией, может не так понимаю условие задачи? помогите разобраться:

    Код:
    #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 Гость

    Репутация:
    0
    оно стопудово зациклится,
    из функции f(1,2) вы вызываете опять f(1,2) и так до бесконечности.

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

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

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

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


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

    doompochta New Member

    Репутация:
    0
    Регистрация:
    21 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Выразил tn(x,k):
    Код:
    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 Гость

    Репутация:
    0
    f (1, 3) вызовет f (1, 2) и f (1, 4)
    f (1, 2) вызовет f (1, 1) и f (1, 3)
    => цикл
     
  5. rrrFer

    rrrFer Гость

    Репутация:
    0
    считать все-таки надо T(k+1) :)

    можно вывести более нормальную формулу. Посчитайте на бумаге как должна работатьпрограмма, легко найдете закономерность. Но можно и так написать:
    Код:
    #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);
    }
     
Загрузка...
Статус темы:
Закрыта.

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