Другие языки программирования и технологии

Вычислить произведение 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);
}
АР
Андрей Райхерт
76 473
Лучший ответ
Киса, ты бы хоть написала, в чём именно проблема у тебя.

Вот эта строчка у тебя не в порядке:
for(i=0;i<n;i++)>0) {
Очевидно, что должно быть вот так:
for(i=0;i<n;i++)if(n>0)Х

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