Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Монтгомери
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 146
1

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

10.06.2014, 23:45. Просмотров 833. Ответов 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(n) = sinf(n - 1) + cosf(n - 2), f(0) = f(1) =...

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

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

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

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

12
you_rule
56 / 56 / 33
Регистрация: 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 / 22
Регистрация: 12.02.2014
Сообщений: 108
10.06.2014, 23:55 3
А есть начальные условия?
f(0) чему равно?
0
Eva Rosalene
T for Trans-
4051 / 1590 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
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 / 2
Регистрация: 10.09.2013
Сообщений: 146
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
Eva Rosalene
T for Trans-
4051 / 1590 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
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 / 2
Регистрация: 10.09.2013
Сообщений: 146
11.06.2014, 00:33  [ТС] 7
Спасибо и за нерекурсивное (хотя это было необязательно).
А как вместо возвращения "-1" сделать вывод сообщения об ошибке?
Ну, с cout это понятно, а как закончить действие функции после этого? break? Или break только для циклов подходит?
0
Eva Rosalene
T for Trans-
4051 / 1590 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
11.06.2014, 00:36 8
Монтгомери, исключения (exceptions). Но вы это пока не проходили (по другим темам вижу). Если хотите - дерзайте, материалов в сети достаточно.
1
Монтгомери
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 146
11.06.2014, 01:10  [ТС] 9
Скажите, а можно ли вызывать функцию в cout?
Например так:
C++
1
cout<<"Recursive solution: "<<f(5);
0
you_rule
56 / 56 / 33
Регистрация: 08.03.2014
Сообщений: 138
11.06.2014, 01:18 10
Монтгомери, да, конечно же можно
1
SlavaSSU
217 / 162 / 47
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 01:18 11
да, так можно выводить. не понял вопроса насчет прекращения работы функции при "-1"? если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
0
Монтгомери
3 / 3 / 2
Регистрация: 10.09.2013
Сообщений: 146
11.06.2014, 01:26  [ТС] 12
Цитата Сообщение от SlavaSSU Посмотреть сообщение
если ты ее вызовешь как f(0) допустим, она сразу возвратит -1 и прекратит работать
Вот именно, что вернёт -1. Я спрашивал про вариант вывода сообщения об ошибке вместо возвращения -1.
0
SlavaSSU
217 / 162 / 47
Регистрация: 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
11.06.2014, 01:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 01:42

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

Решение краевой задачи для линейного дифференциального уравнения второго порядка методом конечных разностей
Помогите составить программу в С++: Используя метод конечных разностей, найти...

Написать рекурсивную функцию для нахождения произведения цифр натурального числа
.Написать рекурсивную функцию для нахождения произведения цифр натурального...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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