Langsung ke konten utama

Minggu 5: Fungsi Rekursif

Latihan Rekursif Bab 5

Soal 1
Buatlah fungsi fibonacci dengan cara iteratif.


#include<iostream>

using namespace std;

class Hitung{
public:
int fibonacci(int n){
n1 = 1;
n2 = 1;
for(int i=3; i<=n; i++){
n3 = n2 + n1;
n1 = n2;
n2 = n3;
}
return n3;
}
void deretFibonacci(int n){
n1 = 1;
n2 = 1;
cout<<"{"<<n1<<", "<<n2;
for(int i=3; i<=n; i++){
n3 = n2 + n1;
n1 = n2;
n2 = n3;
if(i <= n){
cout<<", ";
}
cout<<n3;
}
cout<<"}";
}
private:
int n1, n2, n3;
};

int main(){
int n;
cout<<"Masukkan n: "; cin>>n;
Hitung objek;
cout<<"Deret fibonacci sampe ke-n = ";
objek.deretFibonacci(n); cout<<endl;
cout<<"U"<<n<<" = "<<objek.fibonacci(n);
return 0;
}




Soal 2
Buatlah fungsi fibonacci dengan 2 cara rekursif yang lain.


#include<iostream>

using namespace std;

class Hitung{
public:
int fibonacci(int n){
if(n==1 || n==2){
return 1;
} else{
return fibonacci(n-1) + fibonacci(n-2);
}
}
private:
int n1, n2, n3;
};

int main(){
int n;
cout<<"Masukkan n: "; cin>>n;
Hitung objek;
cout<<"U"<<n<<" = "<<objek.fibonacci(n);
return 0;
}




Soal 5
Diberikan suatu bilangan bulat positif. Cetaklah bilangan bulat tersebut secara terbalik, secara iteratif maupun rekursif.


#include<iostream>

using namespace std;

class Hitung {
public:
int iteratif(int x){
terbalik = 0;
while(x != 0){
sisa = x%10;
terbalik = terbalik*10 + sisa;
x = x/10;
}
return terbalik;
}
int rekursif(int x){
if(x != 0){
cout<<x%10;
return rekursif(x/10);
}
}
private: 
int sisa, terbalik;
};

int main(){
int bil;
cout<<"Masukkan bilangan bulat positif: "; cin>>bil;
Hitung objek;
cout<<"Bilangan terbalik secara iteratif: "<<objek.iteratif(bil)<<endl;
cout<<"Bilangan terbalik secara rekursif: ";
objek.rekursif(bil);
return 0;
}




Soal 6
Buatlah suatu subprogram yang mengembalikan nilai maksimum pertama (misal m1) dan nilai maksimum kedua (misal m2, dan m1 ≠ m2) dari array dengan n bilangan bulat.


#include<iostream>

using namespace std;

class Hitung {
public:
int pertama(int array[], int n){
m1 = array[0];
for(int i=0; i<n; i++){
if(array[i] > m1){
m1 = array[i];
}
}
return m1;
}
int kedua(int array[], int n, int terbesar){
m2 = array[0];
for(int i=0; i<n; i++){
if(array[i]<terbesar && array[i]>m2){
m2 = array[i];
}
}
return m2;
}
private: 
int m1, m2;
};

int main(){
int panjang;
cout<<"Masukkan panjang array: "; cin>>panjang;
int arr[panjang];
for(int i=0; i<panjang; i++){
cout<<"Index ke-"<<i<<" : "; cin>>arr[i];
}
Hitung objek;
cout<<"m1 = "<<objek.pertama(arr, panjang)<<endl;
cout<<"m2 = "<<objek.kedua(arr, panjang, objek.pertama(arr, panjang));
return 0;
}




Soal 7
Algoritma 5.5 menggunakan fungsi untuk menghitung n faktorial secara rekursif. Buatlah algoritma menghitung n faktorial dengan menggunakan prosedur !


#include<iostream>

using namespace std;

class Hitung{
public:
void nFaktorial(int n){
faktorial = 1;
for(int i=n; i>=1; i--){
faktorial = faktorial * i;
cout<<i;
if(i > 1){
cout<<" x ";
}
}
}
int getFaktorial(){
return faktorial;
}
private:
int faktorial;
};

int main(){
int n;
cout<<"Masukkan n: "; cin>>n;
Hitung objek;
cout<<n<<"! = ";
objek.nFaktorial(n);
cout<<" = "<<objek.getFaktorial();
return 0;
}



Komentar