Informatyka (I E / I AiR) - lista zadań 7 - propozycje rozwiązań
1. Użyj rekurencji i napisz funkcję o prototypie double a(int n), która dla n<0 zwróci 0, a dla
n≥0 obliczy n-ty wyraz ciągu a zdefiniowanego następująco:
a
0
=
1
a
n
=
a
n−1
n
2
#include <iostream>
using namespace std;
double a(int n)
{
if (n<0) return 0;
if (n==0) return 1;
return a(n-1)+n*n;
}
//program wypisuje 30 pierwszych wyrazów ciągu
int main()
{
for (int i=0;i<30;i++)
cout<<"a["<<i<<"]="<<a(i)<<endl;
system("pause");
return 0;
}
2. Użyj rekurencji i napisz funkcję o prototypie double b(int n), która dla n<0 zwróci 0, a dla
n≥0 obliczy n-ty wyraz ciągu b zdefiniowanego następująco:
b
0
=
1
b
n
=
b
n−1
100−
n
#include <iostream>
#include <cmath>
using namespace std;
double b(int n)
{
if (n<0) return 0;
if (n==0) return 1;
return b(n-1)+100-sqrt(n);
}
//program wypisuje 30 pierwszych wyrazów ciągu
int main()
{
for (int i=0;i<30;i++)
cout<<"b["<<i<<"]="<<b(i)<<endl;
system("pause");
return 0;
}
3. Dla funkcji z zadań 1 i 2 napisz program, który wypisze wszystkie wyrazy ciągu (a
n
) dla
0<n<1000 które są mniejsze od odpowiedniego wyrazu ciągu (b
n
).
#include <iostream>
#include <cmath>
using namespace std;
double a(int n)
{
if (n<0) return 0;
if (n==0) return 1;
return a(n-1)+n*n;
}
double b(int n)
{
if (n<0) return 0;
if (n==0) return 1;
return b(n-1)+100-sqrt(n);
}
int main()
{
for (int i=1;i<1000;i++)
if (a(i)<b(i))
cout<<"a["<<i<<"]="<<a(i)<<endl;
system("pause");
return 0;
}
4. Użyj rekurencji i napisz funkcję o prototypie double c(int n, double k), która dla n<0 zwróci 0, a
dla n≥0 obliczy n-ty wyraz ciągu c zdefiniowanego następująco:
c
0
=
1
c
n
=
c
n−1
k
2
−
2⋅c
n−2
, dla n parzystych
c
n
=
c
n−1
−
n⋅∣k∣, dla n nieparzystych
Napisz odpowiedni program i wypisz pierwszych 10 wyrazów tego ciągu.
#include <iostream>
#include <cmath>
using namespace std;
double c(int n,double k)
{
if (n<0) return 0;
if (n==0) return 1;
if (n%2==0)
return c(n-1,k)+k*k-2*c(n-2,k);
else return c(n-1,k)-sqrt(n*abs(k));
}
//zakładamy k=1.5 - dla przykładu
const double k=1.5;
int main()
{
for (int i=0;i<10;i++)
cout<<"c["<<i<<"]="<<c(i,k)<<endl;
system("pause");
return 0;
}