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

подпрограммы. рекурсивные алгоритмы. - C++

Восстановить пароль Регистрация
 
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
10.04.2011, 13:41     подпрограммы. рекурсивные алгоритмы. #1
Приветствую форумчан.

Задача: решить данные задачи с применением подпрограмм - рекурсии.(см. приложение)

Что прошу: помочь в выполнении
Миниатюры
подпрограммы. рекурсивные алгоритмы.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2011, 13:41     подпрограммы. рекурсивные алгоритмы.
Посмотрите здесь:

РЕКУРСИВНЫЕ АЛГОРИТМЫ C++
Рекурсивные алгоритмы обработки структур данных C++
C++ Рукурсии и рекурсивные алгоритмы
C++ Рекурсивные алгоритмы
Рекурсивные алгоритмы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
10.04.2011, 16:59     подпрограммы. рекурсивные алгоритмы. #2
IIIa66uMEM6eP, в твоей функции нужно проверять три варианта (именно в таком порядке):
  1. Если k = 1, то результат равен единице.
  2. Если k нечетное, то значение функции вычисляется по первой формуле.
  3. Если k - четное, то по второй.
Естественно, функция принимает параметром это число k.
А по поводу задачи - все же дано, формулы (вычисления) - элементарные, в чем сложности-то?
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
11.04.2011, 20:30  [ТС]     подпрограммы. рекурсивные алгоритмы. #3
Nameless One, подскажите как сделать рекурсию, чтобы мы обращались к предыдущему члену..
Пример входных данных:
in: n = 5
out: F = 1
in: n = 7
out: F = -1
Код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;
 
bool Func(int n) 
{   
 if (n % 2 == 0) Func1 ;
 else Func2; 
}
//
// заведомо пропускаю случай когда ф1=1.
int Func1(int k)
{ return k*k;
    }
    
int Func2(int k)
{  return k2-k1 ;
    }
 
int main(int argc, char *argv[])
{
    setlocale (LC_CTYPE, "rus");
 
    int n; 
    int k;
    cout << "ввести н: " << endl;
    cin >> n;
  if (n==1) cout << "n=1" << endl; 
    for (k=2; k<=n; k++)
    Func(k);
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
12.04.2011, 05:15     подпрограммы. рекурсивные алгоритмы. #4
IIIa66uMEM6eP, то, что ты написал - это ни разу не рекурсия. Советую ознакомиться с ее определением.
А у тебя вообще непонятно что.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
int f(int k)
{
    int temp;
    if(k == 1)
        return 1;
    if(k & 1)
        return f(k - 1) - f(k - 2);
    temp = f(k / 2);
    return temp * temp;
}
 
int main(void)
{
    int k;
    fputs("Input k: ", stdout);
    scanf("%d", &k);
    printf("f(%d) = %d\n", k, f(k));
    exit(0);
}
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
12.04.2011, 08:16  [ТС]     подпрограммы. рекурсивные алгоритмы. #5
как будет выглядеть
C
1
fputs("Input k: ", stdout);
в с++.
конкретно
перенаправления stdout в область памяти и
Функция fputs()
Указатели использовать нельзя.

Добавлено через 5 минут
Доделал 2 задачу, если кому интересно/пригодится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;
 
 
 
 
int main(int argc, char *argv[])
{
    setlocale (LC_CTYPE, "rus");
int razmer;
int buff;
cout << "Ввести размер массива: " << endl;
cin >> razmer;
int Masiv[razmer];
cout << "Введите массив: " << endl;
for (int i=0; i < razmer; i++)
cin >> Masiv[i];
 
int i = 0;
int j = razmer-1;
while (i < j) 
{ buff = Masiv[i];
  Masiv[i] = Masiv[j];
  Masiv[j] = buff; 
  i++;
  j--;  
     }
cout << "Ответ: " << endl;
for (int i = 0; i < razmer; i++)
cout << Masiv[i] << endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
12.04.2011, 08:27     подпрограммы. рекурсивные алгоритмы. #6

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <conio.h>
long f(int k) {
    if(k==1)
        return 1;
    else if(k%2==0)
        return f(k/2)*f(k/2);
    else
        return f(k-1)-f(k-2);
}
int main() {
    std::cout<<f(7);
    getch();
    return 0;
}
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
12.04.2011, 08:39  [ТС]     подпрограммы. рекурсивные алгоритмы. #7
nikkka, хех, так соль в том что бы пользователь выбирал какой то N, место в этой последовательности, а не вы за него.. все же в этом и была проблема. без указателей я не пойму как передать значение n в функцию..
у Nameless One, это было выполнено в строке
C
1
fputs("Input k: ", stdout);
.
Все равно спасибо.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
12.04.2011, 10:21     подпрограммы. рекурсивные алгоритмы. #8
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
как будет выглядеть
C
1
fputs("Input k: ", stdout);
в с++.
конкретно
перенаправления stdout в область памяти и
Функция fputs()
Указатели использовать нельзя.
не распарсил. Ты не знаешь, как сделать в С++ ввод/вывод?

Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
nikkka, хех, так соль в том что бы пользователь выбирал какой то N, место в этой последовательности, а не вы за него.. все же в этом и была проблема. без указателей я не пойму как передать значение n в функцию..
у Nameless One, это было выполнено в строке
C
1
fputs("Input k: ", stdout);
у меня ввод значения был не в этой, а в следующей строке. А в упомянутой тобой строке был всего лишь вывод строкового литерала в стандартный поток вывода, а функция fputs использовалось вместо puts лишь потому, что она, в отличие от последней, не добавляет в вывод перевод строки.
без указателей я не пойму как передать значение n в функцию..
При чем здесь указатели? Чтобы передать значение n в функцию, тебе всего-навсего нужно вызвать функцию с n в качестве параметра.
Без обид, но у меня сложилось впечатление, что ты в обсуждаемой теме вообше ни бум-бум.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2011, 11:56     подпрограммы. рекурсивные алгоритмы.
Еще ссылки по теме:

C++ рекурсивные алгоритмы
C++ Итерационные и рекурсивные алгоритмы
C++ Рекурсивные алгоритмы, вычисление a^n

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

Или воспользуйтесь поиском по форуму:
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
12.04.2011, 11:56  [ТС]     подпрограммы. рекурсивные алгоритмы. #9
Цитата Сообщение от Nameless One Посмотреть сообщение
Без обид, но у меня сложилось впечатление, что ты в обсуждаемой теме вообше ни бум-бум.
если бум бум то не обращался бы)) согласен вопрос тупой, осознал - исправил))
Yandex
Объявления
12.04.2011, 11:56     подпрограммы. рекурсивные алгоритмы.
Ответ Создать тему
Опции темы

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