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

Рекурсия: вычисление выражения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двумерный массив http://www.cyberforum.ru/cpp-beginners/thread580238.html
Программа должна по выбору пользователя осуществлять ввод исходной матрицы с клавиатуры или из файла. Для этого программа должна содержать две соответствующие функции, указатель на одну из которых...
C++ Численное решение уравнения Добрый день, имеется следующее уравнение: sin(t) = b*{e}^{v*t} b и v - константы, v > 0 Решаю его численно методом Ньютона, и в принципе, всё хорошо, 1 корень получаю, но мне нужен ещё один,... http://www.cyberforum.ru/cpp-beginners/thread580225.html
C++ Написать функцию, возвращающую количество гласных в произвольном слове
Написать функцию, возвращающую количество гласных в произвольном слове. С помощью нее, определить в тексте слово с максимальным количеством гласных.
Получить сумму тех чисел последовательности, которые нечётны и отрицательны C++
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые нечётны и отрицательны.
C++ Составить программу для вычисления площади кольца по значениям внутреннего и внешнего радиусов http://www.cyberforum.ru/cpp-beginners/thread580191.html
1.Составить программу для вычисления площади кольца по значениям внутреннего и внешнего радиусов, используя функцию вычисления площади круга. 2. Даны три целых числа. Определить, сумма цифр...
C++ Написать программу, которая удаляет из введенной с клавиатуры строки конечные пробелы Пожалуйста помогите... Написать программу, которая удаляет из введенной с клавиатуры строки конечные пробелы. заранее спасибо подробнее

Показать сообщение отдельно
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
21.05.2012, 19:27  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение
Решение задачи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <math.h>
using namespace std;
 
double rec(double i,double k,int N)
{   
     static int count=0;
         count++; //При каждом вызове увеличиваем счетчик вызовов функции
     double sum=sqrt(i+k); //Корень суммы двух слагаемых     
     i++;k++;        //Меняем значения слагаемых для будущих вычислений
     if (count<N) return sqrt(rec(i,k,N))*sum; //Рекурсивный вызов нужное число раз
     else return sum; //Вывод окончательного результата
}
 
void main()
{   int x,y,N; //Первое слагаемое, второе слагаемое и количество вызовов функции
    cin>>x>>y>>N; //Вводим нужные данные
    cout<<rec(x,y,N)<<'\n'; //Расчет и вывод результата на экран
 system("PAUSE");
}
Для того чтобы функция знала когда остановится внутри функции объявлена статическая переменная count. Являясь локальной действует она только внутри функции, но ведет себя внутри этой функции как глобальная.
При произведении расчета нужно осознавать, что только после необходимых вычислений нужно менять слагаемые. Поэтому сначала вычисление корня и запоминание этого в sum и только после этого увеличение каждого из слагаемых на один.

Дальше только проверка условия. Выполнился ли вызов функции столько раз сколько ей сказали. Если нет, то функция каждый раз снова вызывает себя, если же вызов функции выполнился сколько нужно, то выводится только то значение, которое нужно
спасибо большое за помощь!
но при вводе N больше единицы, программа просто отказывается работать ):
а можно этот count заменить просто условием, как у меня.. что до тех пор, пока какая-то переменная будет меньше, то запустить функцию ещё раз?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru