Podwójna silnia

0

Witam! Czy ktoś mógłby mi pomóc napisać program obliczający podwójną silnie?

0

Z czym masz problem? Pokaż jak to próbowałeś zrobić.

0

Jak robisz to rekurencyjnie, to tak samo jak zwykłą silnię, tylko odejmujesz 2 zamiast 1 w parametrze funkcji.

0

Miałem dopiero 2 lekce z pythona także jestem totalnie zielony. Mam problem ze sprowadzeniem zapisu n = n*(n-2)(n-4)... i tak dalej. Ale pewnie to jest źle.
Nie wiem z czego powinienem korzystać, gdyż miałem tylko pętle while, for no i range. Liczę na jakąś podpowiedź, która mnie samego naprowadzi na rozwiązanie.
Pozdrawiam!

0

Proszę o jakieś wskazówki z wykorzystaniem tego co podałem.

0

Tworzysz funkcję, powiedzmy def silnia(n). Poczytaj, czym jest rekurencja. Tutaj masz algorytm z wikipedii:
user image

Pierwszą część algorytmu sprawdziwsz ifem, drugą robisz rekurencyjnie. To jest pierwszy sposób.

Jeśli nie chcesz robić tego rekurencją, to jest drugi - za pomocą pętli for przykładowo. Taki sam warunek jak na początku. Robisz pętle, mnożysz, zwracasz wynik. Dla podpowiedzi powiem, że range może mieć 3 argumenty, z czego ten trzeci to krok pętli, czyli co ile przeskakuje licznik.

Najlepiej zrób obiema metodami, nauczysz się :)

0

A jak byś napisał normalną silnie? (Albo jak robiliście na ćwiczeniach)

Jeśli podasz jakiś kod by było prościej podpowiedzieć jak zmodyfikować.

0

silnia n = int(raw_input('podaj liczbę'))
wynik = 1
licznik = 1
while licznik != n:
wynik *= licznik
licznik +=1
print wynik

To jest ten kod z ćwiczeń, a raczej nie ten, bo chyba źle go przepisałem, był już na końcu... Albo tej silni nie umiem rozpisać, albo nie wiem co, inne rzeczy raczej mi wychodziły.

0
def double_factorial(n):
	if n <= 1: return 1
	else: return n * double_factorial(n - 2)

def double_factorial_tailrec(n):
	def go(n, acc):
		if n <= 1: return acc
		else: return go(n - 2, n * acc)
	return go(n, 1)

def double_factorial_iter(n):
	result = 1
	while n >= 2:
		result *= n
		n = n - 2
	return result

print(double_factorial(8))
print(double_factorial_tailrec(8))
print(double_factorial_iter(8))
0
n = input('Podaj liczbę')
if n%2 == 0:
    for b in range(2, n, 2):
        n = n  * b
print n

Dobra, to wymyśliłem dla liczb parzystych, wychodzi podwójna silnia. Jak ująć warunek dla liczb nieparzystych?

0
print'Program obliczający podwójną silnię:'
n = input('Podaj liczbę')
if n%2 == 0:
    for b in range(2, n, 2):
        n = n  * b
    print n

elif n%2 != 0:
    for c in range(1, n, 2):
        n = n * c
    print n

Chyba mi wyszło :-)

0

Jeżeli jest ok, to poproszę o usunięcie wątku, pozdrawiam :-)

0

Nie jest ok, czym się różnią twoje dwie pętle? Kompletnie niczym :) Sprawdź jeszcze raz algorytm, który wkleiłem. Po co sprawdzasz, czy liczba jest parzysta, przecież od tego nic nie zależy? @n0name_l dał ci rozwiązanie, tyle, że z pętlą while.

0
Wizzie napisał(a):

Nie jest ok, czym się różnią twoje dwie pętle? Kompletnie niczym :) Sprawdź jeszcze raz algorytm, który wkleiłem. Po co sprawdzasz, czy liczba jest parzysta, przecież od tego nic nie zależy? @n0name_l dał ci rozwiązanie, tyle, że z pętlą while.

Dał mi rozwiązanie jakieś bardziej zaawansowane, a to chciałem zrobić tylko z tego co było. No ja tak potrafiłem rozpisać, po 2 ćwiczeniach z pythona expertem nie jestem :-) No to jak inaczej to prosto rozpisać, po 2 lekcjach z pythona? :(

0

Napisałem, po co ci sprawdzać czy liczba jest parzysta? Od tego nic nie zależy. Robisz fora aż do dwójki i mnożysz, jak jest mniejsze od dwójki to wtedy silnia z tego jest równa 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1