Другие языки программирования и технологии
Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
с применением рекурсии и без нее.. язык C++. Помогите, пожалуйста, что делаю не так?.. я уже ничего не понимаю.. #include <iostream.h> #include <math.h> double pr(int); // без рекурсии double prr(int); // с рекурсией int main() { int n; cout << "Vvedite n " << endl; cin >> n; cout << "p (ne rekurs) = " << pr(n) << endl; cout << "p (rekurs) = " << prr(n) << endl; return 0; } double pr(int n) { int i; double c=2, z=1, k, p=1; for(i=0;i<n;i++)>0) { c+=2; p*=(c/z); } else { z+=2; p*=(c/z); } return p; } double prr(int n) { int i; double c=2, z=1, k, p=1; if(n==2) return 1; else { if(fmod(n,2)>0) return prr(n-2)*(c+2/z); else return prr(n-2)*(c/z+2); } }
Там часть кода съедено редактором, надо его полностью правильно вывести, а то непонятно где действительно ошибка, а где глюки данного редактора (например в функции pr в цикле пропал оператор if
Вот успел отредактировать код, но сильно не проверял
#include <iostream>
#include <math.h>
using namespace std;
double pr(int); // без рекурсии
double prr(int); // с рекурсией
int main() {
int n;
cout << "Vvedite n " << endl; cin >> n;
cout << "p (ne rekurs) = " << pr(n) << endl;
cout << "p (rekurs) = " << prr(n) << endl;
return 0;
}
double pr(int n)
{
int i; double c=2, z=1, k, p=1;
for(i=0;i < n;i++)
{
p*=(c/z);
if(i%2) c+=2;
else z+=2;
}
return p;
}
double prr(int n)
{
int i; double c=2, z=1, k, p=1;
if(n==1) return 2;
else
if(n%2)
return (n+1)*prr(n-1)/n;
else
return n*prr(n-1)/(n+1);
}
Вот успел отредактировать код, но сильно не проверял
#include <iostream>
#include <math.h>
using namespace std;
double pr(int); // без рекурсии
double prr(int); // с рекурсией
int main() {
int n;
cout << "Vvedite n " << endl; cin >> n;
cout << "p (ne rekurs) = " << pr(n) << endl;
cout << "p (rekurs) = " << prr(n) << endl;
return 0;
}
double pr(int n)
{
int i; double c=2, z=1, k, p=1;
for(i=0;i < n;i++)
{
p*=(c/z);
if(i%2) c+=2;
else z+=2;
}
return p;
}
double prr(int n)
{
int i; double c=2, z=1, k, p=1;
if(n==1) return 2;
else
if(n%2)
return (n+1)*prr(n-1)/n;
else
return n*prr(n-1)/(n+1);
}
Киса, ты бы хоть написала, в чём именно проблема у тебя.
Вот эта строчка у тебя не в порядке:
for(i=0;i<n;i++)>0) {
Очевидно, что должно быть вот так:
for(i=0;i<n;i++)if(n>0)Х
то есть, если какая-то переменная больше нуля, то выполняешь один цикл - если меньше, то другой.
только я не знаю, какую ты переменную должна сравнивать с нулём, так что вместо n там может быть что-то другое, думай.
Вот эта строчка у тебя не в порядке:
for(i=0;i<n;i++)>0) {
Очевидно, что должно быть вот так:
for(i=0;i<n;i++)if(n>0)Х
то есть, если какая-то переменная больше нуля, то выполняешь один цикл - если меньше, то другой.
только я не знаю, какую ты переменную должна сравнивать с нулём, так что вместо n там может быть что-то другое, думай.
Похожие вопросы
- Найдите закономерности 1,1,1,2,3,4,3,5,7_,7,_,5,9,13,_,_,16
- ПОМОГИТЕ! Нужны числа от 1 до 1 000 000 в таком порядке:. 1 2 3 4 5 6 7
- Pomogite pozhalujsta.. vse vozmozhnie kombinacii.. 1 2 3 4 5 6 7 8 9 10 11 12
- Здравствуйте. Заключите, пожалуйста, следующий набор цифр в модуль. Очень нужно. 1 2 3 4 5 6 7 8 9 Премного благодарен.
- Сколько чисел надо взять в последовательности 1+2+3+4...,чтобы получить число,больше чем N?
- как делаеться сортировка данных по страницам. Типа стр 1 2 3 4 5...
- С++..число 15%4 к какому типу переменой относится? а 8/5?..3/4? ..3/4?
- Помогите составить блок схему. Данны целые числа n, k (n>=k>=0). Вычислить n(n-1)*(n-2)... (n-k-1)/k!
- Помогите написать на ассемблере програму для вычисления виражения y=(c-(d/2)+33 )/(2*a*a-1). c=5,d=6,a=3.
- Решите задачу! Дано целое число n найдите сумму 1^n +2^n-1 + 3^n-2 ...+n^1