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

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

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

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

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

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

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

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

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

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

Решение линейного уравнения методами "вилки" и секущих C++
C++ Решение линейного уравнения
C++ Смоделировать работу линейного рекуррентного регистра
Алгоритм нахождения цифрового корня натурального числа C++
C++ Решение линейного и квадратного уравнения
C++ Линейное уравнение у = Ах + В.Реализовать метод Root()— вычисление корня линейного уравнения
Реализовать программу для вычисления линейного арифметического выражения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
10.06.2014, 23:53     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #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;
}
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
10.06.2014, 23:55     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #3
А есть начальные условия?
f(0) чему равно?
FraidZZ
Ex-Member
3897 / 1523 / 229
Регистрация: 06.01.2013
Сообщений: 4,049
Завершенные тесты: 1
10.06.2014, 23:57     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #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);
}
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
11.06.2014, 00:01  [ТС]     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #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);}
Я всё правильно понял?
FraidZZ
Ex-Member
3897 / 1523 / 229
Регистрация: 06.01.2013
Сообщений: 4,049
Завершенные тесты: 1
11.06.2014, 00:26     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #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];
}
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
11.06.2014, 00:33  [ТС]     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #7
Спасибо и за нерекурсивное (хотя это было необязательно).
А как вместо возвращения "-1" сделать вывод сообщения об ошибке?
Ну, с cout это понятно, а как закончить действие функции после этого? break? Или break только для циклов подходит?
FraidZZ
Ex-Member
3897 / 1523 / 229
Регистрация: 06.01.2013
Сообщений: 4,049
Завершенные тесты: 1
11.06.2014, 00:36     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #8
Монтгомери, исключения (exceptions). Но вы это пока не проходили (по другим темам вижу). Если хотите - дерзайте, материалов в сети достаточно.
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
11.06.2014, 01:10  [ТС]     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #9
Скажите, а можно ли вызывать функцию в cout?
Например так:
C++
1
cout<<"Recursive solution: "<<f(5);
you_rule
56 / 57 / 21
Регистрация: 08.03.2014
Сообщений: 138
11.06.2014, 01:18     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #10
Монтгомери, да, конечно же можно
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 01:18     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #11
да, так можно выводить. не понял вопроса насчет прекращения работы функции при "-1"? если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
11.06.2014, 01:26  [ТС]     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #12
Цитата Сообщение от SlavaSSU Посмотреть сообщение
если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
Вот именно, что вернёт -1. Я спрашивал про вариант вывода сообщения об ошибке вместо возвращения -1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 01:42     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k
Еще ссылки по теме:

Составить функцию для нахождения наименьшего нечетного натурального делителя C++
Решение линейного уравнения C++
C++ Нахождение наименьшего нечетного натурального делителя k (k≠1) любого заданного натурального числа n
C++ Используя перебор значений найти все такие целые a, b, что n=3a+5b для любого натурального n>7
C++ Составить программу для решения линейного уравнения ax = b

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

Или воспользуйтесь поиском по форуму:
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 01:42     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k #13
не понимаю какую ошибку надо именно вывести? можно сделать чтоб прога упала!!! надо включить #include<cassert>
и дописать в функцию перед всеми ифами assert(n > 0); т.е.
int f(int n)
{
assert(n > 0);
//если n <= 0 прога упадет!!!
do something;
}
Yandex
Объявления
11.06.2014, 01:42     Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k
Ответ Создать тему
Опции темы

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