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

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

Войти
Регистрация
Восстановить пароль
 
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 129
#1

Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k - C++

10.06.2014, 23:45. Просмотров 713. Ответов 12
Метки нет (Все метки)

На вычислительной практие дали такое задание:

Напишите программу, реализующую решение линейного рекуррентного уравнения нахождения числа f(k) для любого натурального k.
Программа должна содержать
1) рекурсивное решение;
2) не рекурсивное решение (с использованием конструкции цикла).

Вот с первым пунктом и проблемы. Мы в университете пока ещё не проходили такое, можете на примере данной формулы показать как это делается?

f(n+2)=f(n+1)+29f(n) (всего формул 15, остальные по аналогии решу)

Заранее спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2014, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k (C++):

Написать перегруженные шаблоны функций для нахождения корней линейного (a*x + b = 0) уравнения - C++
Кто знает как решить задачу на С++, при помощи шаблонных функций? Написать перегруженные шаблоны функций для нахождения корней линейного ...

Составить программу,которая для любого натурального числа печатает количество цифр в записи этого числа - C++
Помагите решить такую штукенцию=) Составить программу,которая для любого натурального числа печатает количество цифр в записи этого...

Описать функцию возведения любого натурального числа n в куб без операции умножения, пользуясь следующим свойством: куб любого числа n равен - C++
То есть {1}^{3}=1 {2}^{3}=3+5 {3}^{3}=7+9+11 Написала программу на С++ Оказалось что функцию не описала. Как это сделать? ...

Нахождение наименьшего нечетного натурального делителя k (k≠1) любого заданного натурального числа n - C++
Помогите с этой задачой: Подпрограммы Составить функцию для нахождения наименьшего нечетного натурального делителя k (k≠1) любого...

Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке - C++
помогите кто нибудь,пожалуйста,я на сайте первый раз,низнаю к кому обратиться..помогите написать прогу на языке с++ вот задание. ...

Написать рекурсивную функцию для нахождения произведения цифр натурального числа - C++
.Написать рекурсивную функцию для нахождения произведения цифр натурального числа. С помощью этой функции найти произведения цифр пяти...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
10.06.2014, 23:53 #2
Монтгомери,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int n=5;
 
// любая функция, эта возводит число в квадрат
int f(int number)
{
    return number*number;
}
 
// рекурсивная функция
int rec(int k)
{
    return (k<=n)?f(k):f(k)+rec(k-1);
}
 
int main()
{
    cout<<rec(7);
    // тоесть 7*7+6*6+5*5
    return 0;
}
1
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
10.06.2014, 23:55 #3
А есть начальные условия?
f(0) чему равно?
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
10.06.2014, 23:57 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Рекурсивное:
C++
1
2
3
4
5
6
int f(int n){
  if (n < 1) return -1; //Для некорректного вызова
  if (n == 2) return 5; //5 взято с потолка, поскольку неясно, откуда взять первый и второй члены последовательности.
  if (n == 1) return 10;
  return f(n - 1) + 29 * f(n - 2);
}
1
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 129
11.06.2014, 00:01  [ТС] #5
Т.е., если f(1)=0 и f(2)=7, то код будет следующим:

C++
1
2
3
4
5
int f(int n)
{if (n<1) return -1; //Для некорректного вызова
if (n==2) return 7;
if (n==1) return 0;
return f(n-1) + 29*f(n-2);}
Я всё правильно понял?
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
11.06.2014, 00:26 #6
Монтгомери, да

Добавлено через 5 минут
Нерекурсивное:
C++
1
2
3
4
5
6
7
8
9
int f(int x){
  if (x < 1) return -1;
  if (x == 1) return 0;
  if (x == 2) return 7;
  int *arr = new int[x];
  arr[0] = 0; arr[1] = 7;
  for (int i = 2; i < x; i++) arr[i] = arr[i - 1] + 29 * arr[i - 2];
  return arr[x - 1];
}
1
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 129
11.06.2014, 00:33  [ТС] #7
Спасибо и за нерекурсивное (хотя это было необязательно).
А как вместо возвращения "-1" сделать вывод сообщения об ошибке?
Ну, с cout это понятно, а как закончить действие функции после этого? break? Или break только для циклов подходит?
0
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
11.06.2014, 00:36 #8
Монтгомери, исключения (exceptions). Но вы это пока не проходили (по другим темам вижу). Если хотите - дерзайте, материалов в сети достаточно.
1
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 129
11.06.2014, 01:10  [ТС] #9
Скажите, а можно ли вызывать функцию в cout?
Например так:
C++
1
cout<<"Recursive solution: "<<f(5);
0
you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
11.06.2014, 01:18 #10
Монтгомери, да, конечно же можно
1
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 01:18 #11
да, так можно выводить. не понял вопроса насчет прекращения работы функции при "-1"? если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
0
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 129
11.06.2014, 01:26  [ТС] #12
Цитата Сообщение от SlavaSSU Посмотреть сообщение
если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
Вот именно, что вернёт -1. Я спрашивал про вариант вывода сообщения об ошибке вместо возвращения -1.
0
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 01:42 #13
не понимаю какую ошибку надо именно вывести? можно сделать чтоб прога упала!!! надо включить #include<cassert>
и дописать в функцию перед всеми ифами assert(n > 0); т.е.
int f(int n)
{
assert(n > 0);
//если n <= 0 прога упадет!!!
do something;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 01:42
Привет! Вот еще темы с ответами:

Решение линейного уравнения - C++
Напишите функцию,которая решает линейное уравнение ax+b=0 и записывает результат в переменную передаваемую по ссылке. В случае нахождения...

Решение линейного уравнения - C++
Надо написать программу решения линейного уравнения. Входные данные поступают с клавиатуры. Предусмотреть обработку ошибок. Установить...

Решение линейного и квадратного уравнения - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double Lin_riv(double a, double b); double Kvad_riv(double a,...

Смоделировать работу линейного рекуррентного регистра - C++
Здравствуйте! Кто знает как смоделировать работу ЛРР в С++?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.06.2014, 01:42
Ответ Создать тему
Опции темы

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