#include <stdio.h>
#include <math.h>
int func(int a, int n)
{
static int p = -1;
if( p == n) return 0;
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
int main(void)
{
printf("%d\n\n", func(-1, 5));
return 0;
}
рекурсивное вычесление последовательности на С++
Для введённого целого n вычислить a0*2^0+ a1*2^1+ a3*2^3+…+ an*2^n, где а0, а1, а3,…, аn – принимают значения –1, 0,1 поочерёдно, т.е. –1,0,1,-1,0,1, и т.д.
а насчет степеней ты помоему ошибся, или я не поняла. степень возрастает от 0 до n на единицу?
Код:
#include <math.h>
// внутри функции:
double i = 0.0;
double result;
double a = -1.0;
for(; i <= n; i++) {
result += pow(a * 2, i);
++a = (a > 1.0)? -1.0: a;
}
Код:
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
int calcSum(int koef, int pow2, int N)
{
if(N==0)
return koef*pow2;
else
return koef*pow2 + calcSum((koef==1) ? -1 : koef+1, pow2<<1, --N);
}
void main ()
{
int n;
cout << "Vvedite N : ";
cin >> n;
int sum = calcSum(-1, 1, n);
cout << sum << endl;
getch();
}
#include <iostream.h>
#include <conio.h>
int calcSum(int koef, int pow2, int N)
{
if(N==0)
return koef*pow2;
else
return koef*pow2 + calcSum((koef==1) ? -1 : koef+1, pow2<<1, --N);
}
void main ()
{
int n;
cout << "Vvedite N : ";
cin >> n;
int sum = calcSum(-1, 1, n);
cout << sum << endl;
getch();
}
Подправить не проблема, я не мог разобраться с рекурсией в числовом ряде! спасибо
а насчет степеней ты помоему ошибся, или я не поняла. степень возрастает от 0 до n на единицу?
Код:
#include <stdio.h>
#include <math.h>
int func(int a, int n)
{
static int p = -1;
if( p == n) return 0;
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
int main(void)
{
printf("%d\n\n", func(-1, 5));
return 0;
}
#include <math.h>
int func(int a, int n)
{
static int p = -1;
if( p == n) return 0;
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
int main(void)
{
printf("%d\n\n", func(-1, 5));
return 0;
}
Код:
int func(int a, int n)
{
static int p = -1;
if( p == n)
{
p = -1;
return 0;
}
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
{
static int p = -1;
if( p == n)
{
p = -1;
return 0;
}
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
спасибо за поправку, но твой вариант мне больше понравился.
спасибо за поправку, но твой вариант мне больше понравился.[/QUOTE]
В моем варианте тоже нужно бы подправить ф-ю "func"
Код:
int calcSum(int koef, int pow2, int N)
{
if(N == 0)
return koef*pow2;
else
return koef*pow2 + calcSum((koef==1) ? -1 : koef+1, pow2<<1, --N);
}
{
if(N == 0)
return koef*pow2;
else
return koef*pow2 + calcSum((koef==1) ? -1 : koef+1, pow2<<1, --N);
}
Код:
#include <stdio.h>
#include <math.h>
int func(int a, int n)
{
static int p = -1;
if( p == n) return 0;
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
int main(void)
{
printf("%d\n\n", func(-1, 5));//а что это за параметры???
return 0;
}
#include <math.h>
int func(int a, int n)
{
static int p = -1;
if( p == n) return 0;
if(a > 1) a = -1;
p++;
return a*((int)pow(2, p)) + func(++a, n);
}
int main(void)
{
printf("%d\n\n", func(-1, 5));//а что это за параметры???
return 0;
}
Цитата:
короче народ, че то мы не то тут написали=)) звеняюсь может я не так выложил или вы не так поняли, хотя 2 вариант менее вероятен. тут "a" должно меняться -1,0,1,-1,0,1,-1,0,1 ну и т.д.
що то я тебя не понимай :), а мы что написали? и в первом и во втором варианте значение a меняется именно таким образом.
Код:
#include <math.h>
#include <iostream.h>
#include <conio.h>
int func(int a, int n, int p)
{
if(a > 1) a = -1;
if( p == n) return a*((int)pow(2, p));
return a*((int)pow(2, p)) + func(++a, n, ++p);
}
void main ()
{
int n;
cout << "Vvedite N : ";
cin >> n;
int sum = func(-1, n, 0);
cout << sum << endl;
getch();
}
#include <iostream.h>
#include <conio.h>
int func(int a, int n, int p)
{
if(a > 1) a = -1;
if( p == n) return a*((int)pow(2, p));
return a*((int)pow(2, p)) + func(++a, n, ++p);
}
void main ()
{
int n;
cout << "Vvedite N : ";
cin >> n;
int sum = func(-1, n, 0);
cout << sum << endl;
getch();
}
а если не сложно че это за параметры?(-1, n, 0);
a == -1
n - введеное пользователем число (a0*2^0+ ... + an*2^[COLOR=blue]n[/COLOR][COLOR=black])[/COLOR]
0 == p == степень двойки (от 0 до N включительно)
Спасибо огромное
Код:
#include <stdio.h>
#include <math.h>
int main(int stdc, char **argv) {
int n = 10;
if(stdc > 1) {
sscanf(argv[1], "%d", &n);
}
printf("input parameter n = %d\n", n);
printf("calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,"
"where an = -1,0,1,-1,0,1...\n");
double i = 0.0;
double result;
double a = -1.0;
for(; i < n; i++) { // в этой строке была ошибка: было i <= n
result += pow(a * 2, i);
printf("a%d = %d; result = %f\n", int(i), int(a), result);
++a = (a > 1.0)? -1.0: a;
}
printf("result = %f\n", result);
return 0;
}
#include <math.h>
int main(int stdc, char **argv) {
int n = 10;
if(stdc > 1) {
sscanf(argv[1], "%d", &n);
}
printf("input parameter n = %d\n", n);
printf("calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,"
"where an = -1,0,1,-1,0,1...\n");
double i = 0.0;
double result;
double a = -1.0;
for(; i < n; i++) { // в этой строке была ошибка: было i <= n
result += pow(a * 2, i);
printf("a%d = %d; result = %f\n", int(i), int(a), result);
++a = (a > 1.0)? -1.0: a;
}
printf("result = %f\n", result);
return 0;
}
Код:
./seq 16
input parameter n = 16
calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,where an = -1,0,1,-1,0,1...
a0 = -1; result = 1.000000
a1 = 0; result = 1.000000
a2 = 1; result = 5.000000
a3 = -1; result = -3.000000
a4 = 0; result = -3.000000
a5 = 1; result = 29.000000
a6 = -1; result = 93.000000
a7 = 0; result = 93.000000
a8 = 1; result = 349.000000
a9 = -1; result = -163.000000
a10 = 0; result = -163.000000
a11 = 1; result = 1885.000000
a12 = -1; result = 5981.000000
a13 = 0; result = 5981.000000
a14 = 1; result = 22365.000000
a15 = -1; result = -10403.000000
result = -10403.000000
input parameter n = 16
calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,where an = -1,0,1,-1,0,1...
a0 = -1; result = 1.000000
a1 = 0; result = 1.000000
a2 = 1; result = 5.000000
a3 = -1; result = -3.000000
a4 = 0; result = -3.000000
a5 = 1; result = 29.000000
a6 = -1; result = 93.000000
a7 = 0; result = 93.000000
a8 = 1; result = 349.000000
a9 = -1; result = -163.000000
a10 = 0; result = -163.000000
a11 = 1; result = 1885.000000
a12 = -1; result = 5981.000000
a13 = 0; result = 5981.000000
a14 = 1; result = 22365.000000
a15 = -1; result = -10403.000000
result = -10403.000000
calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,where an = -1,0,1,-1,0,1...
a0 = -1; result = 1.000000
[/QUOTE]imho первый result неправильный, и может опечатка, но result не инициализируется.
И ты вычисляешь (Ai*2)^i, вместо Ai*(2^i), но
(-1*2)^6!=-1*(2^6)
И ты вычисляешь (Ai*2)^i, вместо Ai*(2^i), но
(-1*2)^6!=-1*(2^6)[/QUOTE]Да, правда что-то я неуглядел... тогда надо result += a * pow(2, i);
Исправил:
Код:
#include <stdio.h>
#include <math.h>
int main(int stdc, char **argv) {
int n = 10;
if(stdc > 1) {
sscanf(argv[1], "%d", &n);
}
printf("input parameter n = %d\n", n);
printf("calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,"
"where an = -1,0,1,-1,0,1...\n");
double i = 0.0;
double result;
double a = -1.0;
for(; i <= n; i++) {
result += a * pow(2, i);
printf("a%d = %d; result = %f\n", int(i), int(a), result);
++a = (a > 1.0)? -1.0: a;
}
printf("result = %f\n", result);
return 0;
}
#include <math.h>
int main(int stdc, char **argv) {
int n = 10;
if(stdc > 1) {
sscanf(argv[1], "%d", &n);
}
printf("input parameter n = %d\n", n);
printf("calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,"
"where an = -1,0,1,-1,0,1...\n");
double i = 0.0;
double result;
double a = -1.0;
for(; i <= n; i++) {
result += a * pow(2, i);
printf("a%d = %d; result = %f\n", int(i), int(a), result);
++a = (a > 1.0)? -1.0: a;
}
printf("result = %f\n", result);
return 0;
}
На выходе теперь:
Код:
./seq 8
input parameter n = 8
calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,where an = -1,0,1,-1,0,1...
a0 = -1; result = -1.000000
a1 = 0; result = -1.000000
a2 = 1; result = 3.000000
a3 = -1; result = -5.000000
a4 = 0; result = -5.000000
a5 = 1; result = 27.000000
a6 = -1; result = -37.000000
a7 = 0; result = -37.000000
a8 = 1; result = 219.000000
result = 219.000000
input parameter n = 8
calculating a0*2^0 + a1*2^1 + a3*2^3 + ... + an*2^n,where an = -1,0,1,-1,0,1...
a0 = -1; result = -1.000000
a1 = 0; result = -1.000000
a2 = 1; result = 3.000000
a3 = -1; result = -5.000000
a4 = 0; result = -5.000000
a5 = 1; result = 27.000000
a6 = -1; result = -37.000000
a7 = 0; result = -37.000000
a8 = 1; result = 219.000000
result = 219.000000