Fungsi Rekursif
Fungsi Rekursif¶
Fungsi yang memanggil dirinya sendiri untuk melakukan perhitungan
Faktorial
Misalkan $f(n)$ menyatakan faktorial dari $n$, dengan $n$ adalah bilangan bulat lebih dari 1.
Maka $f(n)=n\times (n-1)\times (n-2)\times (n-3)\times ...\times 1$
Bisa juga dituliskan dalam bentuk rekursif, yaitu $f(n)=n\times f(n-1)$
Contoh :
- $f(5)=5\times 4\times 3\times 2\times 1$
- $f(5)=5 \times f(4)$
- $f(4)=4 \times f(3)$
- $f(3)=3 \times f(2)$
- $f(2)=2 \times f(1)$
#Menghitung faktorial dari n, TANPA fungsi dan tanpa rekursif
print("Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya")
n=int(input())
if(n==0 or n==1):
hasil=1
else:
hasil=n
print("n saat ini =",n,"-hasil saat ini", hasil)
while n>=2:
n=n-1
hasil=hasil*n
print("n saat ini =",n,"-hasil saat ini", hasil)
print("faktorial dari bilangan tersebut =",hasil)
Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya 5 n saat ini = 5 -hasil saat ini 5 n saat ini = 4 -hasil saat ini 20 n saat ini = 3 -hasil saat ini 60 n saat ini = 2 -hasil saat ini 120 n saat ini = 1 -hasil saat ini 120 faktorial dari bilangan tersebut = 120
#Menghitung Faktorial dengan fungsi tanpa rekursif
def faktorial(n):
if(n==0 or n==1):
hasil=1
else:
hasil=n
while n>=2:
n=n-1
hasil=hasil*n
return hasil
print("Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya")
n=int(input())
print(n,"faktorial =",faktorial(n) )
Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya 5 5 faktorial = 120
#Menghitung Faktorial dengan fungsi rekursif
def faktorial_r(n):
if (n==1 or n==0):
return 1
else:
hasil = n * faktorial_r(n - 1)
return hasil
print("Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya")
n=int(input())
print(n,"faktorial =",faktorial_r(n) )
Masukkan bilangan bulat lebih dari 1 yang akan dihitung faktorialnya 5 5 faktorial = 120
Deret Fibonacci
Misalkan $f(n)$ menyatakan deret Fibonacci suku ke-$n$, diketahui $f(1)=f(2)=1$
Untuk $n\geq 3$, $f(n)=f(n-1)+f(n-2)$
Buatlah program untuk menentukan $f(n)$.
#Menghitung suku ke-n deret Fibonacci
print("Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung")
n=int(input())
if(n==1 or n==2):
suku=1
else:
a=1 #misalkan a suku ke f(n-2)
b=1 #misalkan b suku ke f(n-1)
suku=0
for i in range(3,n+1):
suku=a+b #f(n)=f(n-2)+f(n-1)
a=b #f(n-1) ditimpa oleh f(n-2)
b=suku #f(n) ditimpa oleh f(n-1)
print("Suku ke-",n,"=",suku)
Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung 10 Suku ke- 10 = 55
#Menghitung suku ke-n deret Fibonacci dengan fungsi
def fibonacci(n):
if(n==1 or n==2):
suku=1
else:
a=1
b=1
suku=0
for i in range(3,n+1):
suku=a+b
a=b
b=suku
return suku
print("Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung")
n=int(input())
print("Suku ke-",n,"=",fibonacci(n))
Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung 10 Suku ke- 10 = 55
#Menghitung suku ke-n deret Fibonacci dengan fungsi rekursif
def fibonacci_r(n):
if(n==1 or n==2):
return 1
else:
return fibonacci_r(n-1)+fibonacci_r(n-2)
print("Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung")
n=int(input())
print("Suku ke-",n,"=",fibonacci_r(n))
Masukkan bilangan bulat n>0, suku deret Fibonacci yang akan dihitung 10 Suku ke- 10 = 55
- f(10)=f(9)+f(8)
- f(9)=f(8)+f(7) ---- f(8)=f(7)+f(6) ...
f(3)=f(2)+f(1) f(3)=2 f(4)=f(3)+f(2)=2+1=3 f
Pertumbuhan tanaman Toge.¶
Misalkan pertumbuhan toge mengikuti rumus rekursif $x_{n+1}=\frac{3}{4}x_{n}+\frac{3}{10}x_{n-1}$, dengan $x_n$ adalah banyak tanaman pada periode ke-$n$, $n$ adalah bilangan bulat lebih dari 1.
Diketahui banyak tanaman toge di awal $x_0=0$ kemudian ditanami $x_1=100$ pohon toge.
Buatlah program dalam bentuk fungsi rekursif.
#Menghitung suku ke-n deret Fibonacci dengan fungsi rekursif
def toge(n):
if(n>1):
return 3/4*toge(n-1)+3/10*toge(n-2)
elif (n==1):
return 100
else:
return 0
print("Masukkan periode tanaman toge ke n, n bilangan bulat lebih dari 1")
n=int(input())
print("Banyak toge pada periode ke-",n,"=",toge(n))
Masukkan periode tanaman toge ke n, n bilangan bulat lebih dari 1 10 Banyak toge pada periode ke- 10 = 110.21393737792968
Hampiran Akar a¶
$\sqrt{a}$ dapat dihampiri oleh $b_n=\frac{b_{n-1}+\frac{a}{b_{n-1}}}{2}$ dengan $b_1=1$ dan $n\geq 2$
print("Masukkan bilangan yang ingin dihitung sqrt-nya, bilangan real positif")
a=float(input())
error=0.00001
#b1=1
p=1 #b n-1
#b2=(b1+a/b1)/2
q=(p+a/p)/2 # b _n
while abs(q-p)>error:
p=q
q=(p+a/p)/2
print("hampiran akarnya adalah",q)
Masukkan bilangan yang ingin dihitung sqrt-nya, bilangan real positif 2 hampiran akarnya adalah 1.4142135623746899
def ss(a):
error=0.00001
p=1
q=(p+a/p)/2
while abs(q-p)>error:
p=q
q=(p+a/p)/2
return q
print("Masukkan bilangan yang ingin dihitung sqrt-nya, bilangan real positif")
a=float(input())
print("hampiran akarnya adalah",ss(a))
Masukkan bilangan yang ingin dihitung sqrt-nya, bilangan real positif 2 hampiran akarnya adalah 1.4142135623746899
Apakah bisa program diatas disajikan dalam bentuk fungsi rekursif?
Silahkan dicoba :)
Comments
Post a Comment