You are on page 1of 4

1.

Fibonacci (O)

Napisz funkcj� (rekurencyjn�) liczenia n-tego elementu ci�gu Fibonacciego.

def ciag_fibo (n):

ciag=None

if n==0 or n==1:
ciag=n

else:
ciag = ciag_fibo(n-1) + ciag_fibo(n-2)

return ciag

n=int(input("Podaj liczb� ca�kowit� nieujemn� dla kt�rej komputer obliczy warto��


n-tego elementu ciagu Fibonaciego"))
ciag=ciag_fibo(n)
print ("Wynik to ", ciag)

2. Symbol Newtona (O)

Napisz funkcj� rekurencyjn� obliczaj�c� warto�� symbolu Newtona

n po k dla n>=k>=0.

Skorzystaj z zale�no�ci:

wzor rekurencyjny dla n,k>0.

n po k wynosi 1 dla k=0 lub k=n

def symbol_newtona (n,k):

if n==0 or n==k:
wynik=1

elif n>k:
wynik=symbol_newtona (n-1, k-1) + symbol_newtona(n-1, k)

else:
wynik = None

return wynik

n=int(int(input("Podaj warto�� n dla kt�rego komputer obliczy warto�� symbolu


Newtona")))
k=int(input("Podaj warto�� k"))
wynik = symbol_newtona(n,k)
print ("Warto�� symbolu Newtona to, ", wynik)

3. Liczby rzymskie (O)


Napisz 3 warianty funkcji, kt�ra przeliczy wprowadzon� liczb� rzymsk� (jako napis)
na jej posta� dziesi�tn�. Pierwszy wariant ma by� iteracyjny, drugi u�ywa�
klasycznej rekurencji (funkcja z jednym parametrem), a trzeci - rekurencji ogonowej
(funkcja z dwoma parametrami).

Wykorzystaj s�ownik:
rzym = { 'M':1000, 'CM':900, 'D':500, 'CD':400, 'C':100, 'XC':90, 'L':50, 'XL':40,
'X':10, 'IX':9, 'V':5, 'IV':4, 'I':1 }

Przyk�adowe dwie propozycje algorytmu zamiany:


- Pierwszy algorytm: Bierzemy z napisu DWA kolejne znaki i sprawdzamy czy taki
dwuznakowy 'wyraz' wyst�puje w s�owniku, je�li tak, to dodajemy do sumy warto��
tego klucza/'wyrazu'. Jak nie to do sumy dodajemy warto�� pierwszego znaku z
'wyrazu'.
- Drugi algorytm: Bierzemy z napisu DWA kolejne znaki i sprawdzamy ich warto�ci w
s�owniku. Je�eli warto�� pierwszego znaku jest wi�ksza ni� drugiego to dodajemy j�
do sumy. Je�eli jest mniejsza to j� odejmujemy.

def rzymskie_dziesietne (liczba):

rzym = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'C': 100, 'XC': 90, 'L': 50,
'XL': 40, 'X': 10, 'IX': 9, 'V': 5,
'IV': 4, 'I': 1}

n=len(liczba)
wynik = 0
prawda=False

for i in range (0, n):

if prawda==True:
prawda=False

if i<(n-1):
spr=liczba[i]+liczba[i+1]

if spr in rzym:
prawda=True
wynik+=rzym[spr]

else:
wynik+=rzym[liczba[i]]
else:
wynik+=rzym[liczba[i]]
return wynik

liczba=input("Podaj liczb� w zapisie rzymskim, komputer zapisze j� w systemie


dziesi�tnym")

wynik = rzymskie_dziesietne(liczba)

print("Twoja liczba to, ", wynik)


def rzymskie_dziesietne (liczba):

rzym = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'C': 100, 'XC': 90, 'L': 50,
'XL': 40, 'X': 10, 'IX': 9, 'V': 5,
'IV': 4, 'I': 1}

n=len(liczba)

if n>1:
spr=liczba[0]+liczba[1]

if spr in rzym:
return rzym[spr] + rzymskie_dziesietne(liczba[2:])

else:
return rzym[liczba[0]] + rzymskie_dziesietne(liczba[1:])
else:
return rzym[liczba[0]]

liczba=input("Podaj liczb� w zapisie rzymskim, komputer zapisze j� w systemie


dziesi�tnym")

print("Twoja liczba to, ", rzymskie_dziesietne(liczba))

def rzymskie_dziesietne (liczba,wynik=0):

rzym = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'C': 100, 'XC': 90, 'L': 50,
'XL': 40, 'X': 10, 'IX': 9, 'V': 5,
'IV': 4, 'I': 1}

n=len(liczba)

if n>1:
spr=liczba[0]+liczba[1]

if spr in rzym:
return rzymskie_dziesietne(liczba[2:], wynik+rzym[spr])

else:
return rzymskie_dziesietne(liczba[1:], wynik+rzym[liczba[0]])
else:
return rzym[liczba[0]]+wynik

liczba=input("Podaj liczb� w zapisie rzymskim, komputer zapisze j� w systemie


dziesi�tnym")

print("Twoja liczba to, ", rzymskie_dziesietne(liczba))

4.Liczba binarna

Napisz funkcj� rekurencyjn� wypisuj�c� podan� liczb� ca�kowit� nieujemn� w postaci


binarnej.
Funkcja ma wypisywa� 0 lub 1 w zale�no�ci od ustawienia analizowanych bit�w.

def binarny (n,binarnie=0,z=0):

if n>0:
binarnie+=(10**z)*(n%2)
n=n//2
z+=1

return binarny(n, binarnie, z)

else:
return binarnie

n=int(input("Podaj liczb� w systemie dziesi�tnym, kt�r� komputer zapisze w systemie


binarnym"))
print("Twoja liczba zapisana w systemie binarnym to, ", binarny(n))

5. Wie�e Hanoi

Napisz program rozwi�zuj�cy problem Wie� Hanoi. Zaimplementuj rozwi�zanie w postaci


funkcji rekurencyjnej:

przenie� N-1 g�rnych kr��k�w z palika pocz�tkowego na palik pomocniczy,


przenie� N-ty kr��ek na palik docelowy,
przenie� N-1 g�rnych kr��k�w z palika pomocniczego na docelowy.

def move_disk (z, do):


print ("Moving disk from ", z, "to ", do)

def move_tower(n, A, C, B):


if n>=1:
move_tower(n-1,A,B,C)
move_disk(A,C)
move_tower(n-1,B,C,A)

move_tower(3,"A","B","C")

You might also like