Podwójna silnia

Odpowiedz Nowy wątek
2014-10-18 15:19
Biały Pomidor
0

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

Pozostało 580 znaków

2014-10-18 15:20
0

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

Pozostało 580 znaków

2014-10-18 15:30
0

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

Pozostało 580 znaków

2014-10-18 16:58
Biały Pomidor
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!

Pozostało 580 znaków

2014-10-18 18:12
Biały Pomidor
0

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

Pozostało 580 znaków

2014-10-18 18:13
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ę :)

edytowany 1x, ostatnio: Wizzie, 2014-10-18 18:14

Pozostało 580 znaków

2014-10-18 18:15
msm
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ć.

edytowany 1x, ostatnio: msm, 2014-10-18 18:15

Pozostało 580 znaków

2014-10-18 22:16
Biały Pomidor
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.

Wstawiaj kod w znaczniki kolorujace skladnie, inaczej sie tego czytac nie da. - n0name_l 2014-10-18 23:01

Pozostało 580 znaków

2014-10-18 23:01
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))
Osobiście preferowałbym inny zapis returnow. Np. return 1 if n &lt;= 1 else n * f(n-1). Ten jest w moim odczuciu nieczytelny. - Tacet 2014-10-19 01:07

Pozostało 580 znaków

2014-10-19 19:54
Biały Pomidor
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?

Pozostało 580 znaków

2014-10-19 20:00
Biały Pomidor
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 :-)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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