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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
#1

Рекурсия, квадратные корни. - C++

10.06.2010, 15:57. Просмотров 2268. Ответов 13
Метки нет (Все метки)

Здравствуйте, очень нужна помощь с задачей на рекурсию "Написать рекурсивную функцию и её нерекурсивный аналог, произвести измерение времени работы написанных функций при разных значениях"
А вычислить нужно вот такое выражение sqrt(6+2(sqrt(7+3(sqrt(8+4(sqrt(9+... и так далее.
Саму тему рекурсия я вроде бы и понял, функция которая вызывает сама себя и т.д... но вот с этим выражением не могу применить... да и обычным методом тоже нет мыслей как считать... т.е они конечно есть, но грамотно оформить в коде чтобы работало, не получаеться(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2010, 15:57     Рекурсия, квадратные корни.
Посмотрите здесь:

Вычислить вложенные квадратные корни из 2 - C++
Ребята помогите пожалуйста!!! Мне необходимо создать код, в котором в зависимости от введенного числа num, считалось количество...

Найти квадратные корни из сум квадратов элементов каждой строки матрицы - C++
Найти и выдать значение: квадратных корней из сум квадратов элементов каждой строки. Добавлено через 2 минуты float S=0; ...

Найти корни уравнений ax^3+bx^2+cx=0 и y^3-ay^2-b=0, используя процедуру. Есть ли у этих уравнений совпадающие корни? - C++
Помогите пожалуйста решить данную задачу, на тему программирование с использованием процедур. Просто сам не врубаюсь(

Квадратные скобки [] - C++
Здравствуйте! Объясните, пожалуйста, значение квадратных скобок в следующих строчках: delete contData; int&...

Квадратные уравнения - C++
Пишу программу для решения квадратных уравнений. Вроде бы простая задача, но вот меня она в ступор ввела. Не решает не одно уравнение....

Квадратные уравнения - C++
#include <iostream> #include <math.h> using namespace std; int main() { float a,b,c,d,di,x1,x2; cout<<"a=";cin>>a; ...

Квадратные уровнения - C++
помогите написать код. программа должна: решить квадратное уравнение по трем коэффициентам. даны a, b и c напишите как можно это...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
10.06.2010, 16:00     Рекурсия, квадратные корни. #2
sqrt(6+2(sqrt(7+3(sqrt(8+4(sqrt(9+... и так далее.
Должен быть предел, иначе получится вечный цикл)
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
10.06.2010, 16:08  [ТС]     Рекурсия, квадратные корни. #3
ну это да, я так понимаю просто заранее указываеться кол-во корней...
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
11.06.2010, 08:47     Рекурсия, квадратные корни. #4
Вот рекурсия. Аналог без рекурсии думаю проблем не создаст?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cmath>
using namespace std;
double resqrt(int,double a=6,double b=2);
int main () {
    cout<<"Enter n : ";
    int n;
    cin>>n;
    cout<<"Answer "<<resqrt(n)<<endl;                            
    system ("pause");
    return 0;
              } 
double resqrt(int n,double a,double b) {
    if (n==1)return (sqrt(a+b));
    double sq=sqrt(a+(b*(resqrt(--n,a+1,b+1))));
    return sq;
}
Вопрос к более опытным людям - почему в строке
C++
1
double sq=sqrt(a+(b*(resqrt(--n,a+1,b+1))));
если написать в параметрах ф-ции не (--n,а+1,b+1), а (--n, ++a, ++b) то результат считает не правильно? Я 20 минут метался между калькулятором и программой, пока не нашел в чем дело )))

Добавлено через 24 минуты
Забыл про время, вот показывает время, прошедшее с начала запуска программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
double resqrt(int,double a=6,double b=2);
int main () {
    cout<<"Enter n : ";
    int n;
    cin>>n;
    cout<<"Answer "<<resqrt(n)<<endl;
    cout<<"Programm work "<<clock()/CLOCKS_PER_SEC<<" sec"<<endl;                            
    system ("pause");
    return 0;
              } 
double resqrt(int n,double a,double b) {
    if (n==1)return (sqrt(a+b));
    double sq=sqrt(a+(b*(resqrt(--n,a+1,b+1))));
    return sq;
}
Добавлено через 13 часов 24 минуты
Я понял проблему с (--n,а+1,b+1) и (--n, ++a, ++b), в рекурсии вообще так делать нельзя!
qwertypal
1 / 1 / 0
Регистрация: 08.06.2010
Сообщений: 9
11.06.2010, 15:03     Рекурсия, квадратные корни. #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
если написать в параметрах ф-ции не (--n,а+1,b+1), а (--n, ++a, ++b)
++a аналогично а=а+1 , поэтому когда в конце концов происходит возврат из resqrt() значение а и b в части
C++
1
sqrt(a+(b*(resqrt(...))))
уже на единицу больше, что не верно ))))))
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
11.06.2010, 15:58     Рекурсия, квадратные корни. #6
Да, я ж написал, что понял в чем дело.
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
12.06.2010, 16:01  [ТС]     Рекурсия, квадратные корни. #7
Всем спасибо за ответы)
Недавно сам разобрался с проблемой, не без посторонней помощи, вот что получилось
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
38
#include<iostream.h>
#include<math.h>
#include <ctime>
//sqrt(6+2(sqrt(7+3(sqrt(8+4(sqrt(9+
 
//sqrt(6+2(sqrt(7+3)))
double cdf(int n, int i) {
 
    if (i == n) {
        return sqrt(i + 5 + (i + 1));
    };
    return sqrt(i + 5 + (i + 1) * cdf(n, i + 1));
 
}
double fun(int n) {
    double res = 1;
    for (int i = 0; i < n; i++) {
        res = sqrt(n - i + 5 + (n + 1 - i) * res);
    }
    return res;
}
;
int main() {
    int n;
    cout << "Введи число корней: ";
    cin >> n;
    clock_t cstart = clock();
    cout <<"Результат выполнения рекурсии: "<< cdf(n, 1);
    clock_t cend = clock();
    double millis = 1000.0 * (cend - cstart) / CLOCKS_PER_SEC;
    cout << " \nВремя выполнения не рекурсивной функции " << millis << " миллисекунд(а)\n";
    cstart = clock();
    cout << "Результат выполнения не рекурсивной функции: "<< fun(n);
    cend = clock();
    millis = 1000.0 * (cend - cstart) / CLOCKS_PER_SEC;
    cout << " \nВремя выполнения не рекурсивной функции " << millis << " миллисекунд(а)\n";
    return 0;
}
Добавлено через 3 минуты
Вроде работает и с калькулятором проверял. предложенный вариант тоже приму к сведению и разберу так сказать)
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
12.06.2010, 16:17     Рекурсия, квадратные корни. #8
Ярослав91, а вы ее проверяли? Как время выводит? Просто я так же пробовал, у меня оба показателя времени (до вызова ф-ции и после) одинаково в тактах, поэтому при вычитании результат 0. Я конечно понимаю, что такого не может быть, но у меня почему-то было именно так), поэтому я не стал этот код выкладывать.
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
12.06.2010, 19:27  [ТС]     Рекурсия, квадратные корни. #9
ну у меня тоже выводит 0, но если количество корней небольшое... а если понизить частоту ЦП на буке и ввести порядка 4 тысяч корней, время выводит, несколько миллисекунд... я думал что 0 из-за быстродействия компа...

Добавлено через 8 минут
например вот:
"Введи число корней: 4900
Результат выполнения рекурсии: 4
Время выполнения не рекурсивной функции 2 миллисекунд
Результат выполнения не рекурсивной функции: 4
Время выполнения не рекурсивной функции 5 миллисекунд"
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
12.06.2010, 20:02     Рекурсия, квадратные корни. #10
А у меня почему-то если большое число циклов задать, то программа вылетает, т.е. просто закрывается. Ни как не пойму почему так?

Добавлено через 1 минуту
и с твоим кодом так же...

Добавлено через 13 минут
сейчас попробовал из командной строки запустить, все нормально!
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
13.06.2010, 06:06  [ТС]     Рекурсия, квадратные корни. #11
А время замеряет или все так же 0?
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
13.06.2010, 10:30     Рекурсия, квадратные корни. #12
В твоем коде задал 5000 корней, результат время 0. Не могу понять почему так. Каждая команда ассемблера выполняется за определенное кол-во тактов, поэтому как ни крути, время должно отличаться, но эта программа упорно выдает одинаковое кол-во тактов до и после вызова ф-ции
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
13.06.2010, 14:29  [ТС]     Рекурсия, квадратные корни. #13
да уж... действительно странно, честно говоря не знаю в чем дело
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2010, 10:26     Рекурсия, квадратные корни.
Еще ссылки по теме:

квадратные уравнение - C++
где здесь ошибка, (использую консол Билдера) #include &lt;iostream.h&gt; #include &lt;math.h&gt; int main() { float a,b,c,x1,x2,d; ...

Квадратные матрицы - C++
Есть квадратные матрицы А и В. Как получить матрицу АВ-ВА?

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

Квадратные матрицы натуральных чисел - C++
Здравствуйте, нужна помощь в решении данных задач в CodeBlocks. 1. Дана квадратная матрица натуральных чисел, (получаемая через...

Даны три квадратные матрицы - C++
Need help^^ Кто-нибудь знает как это реализовать на Си,не на С++. Хотя пофиг)) &quot; Даны три квадратные матрицы А, В и С порядка n...


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

Или воспользуйтесь поиском по форуму:
Ярослав91
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 69
15.06.2010, 10:26  [ТС]     Рекурсия, квадратные корни. #14
ну вот например... все работает

Рекурсия, квадратные корни.
Yandex
Объявления
15.06.2010, 10:26     Рекурсия, квадратные корни.
Ответ Создать тему
Опции темы

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