Kertoma-ongelma

00000000000000000000

Minulla on pythonilla tehty koodi, joka ei toimi haluamallani tavalla, joten käytän nyt ongelman havainnollistamiseksi pseudoa..

Minulla on siis seuraavanlainen pätkä

module kertoma(n) returns n kertoma
if n = 0 then
return 1
else
return n * kertoma(n-1)
endif
endmodule

Mitä tapahtuu, jos kertoman arvoksi tulisi negatiivinen luku, esim. -1? koodissahan ei ole erillistä tarkistusta luvuille, jotka ovat

5

826

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Buudda

      Jos kutsut (kertoma(-1) niin seurauksena on pinon ylivuoto riittävän monen kierroksen jälkeen.
      Katkaisuehto n=0 ei koskaan täyty.

    • Parillisten negatiivisten lukujen kertoma olisi kaiketi sama kuin positiivisten, mutta parittomien negatiivisten lukujen kertoma olisi vastaluku positiivisesta kertomasta. Jos siis funktio toimisi jotakin palauttaen negatiivisillakin luvuilla. Riippuu ...

    • kekkekee

      Vaikka rekursia onkin hauskaa, ei kannata sitä välttämättä joka paikkaan tunkea ;)

      Ylivuotoa ei sentään pääse tapahtumaan, vaikka loppuehto ei täyttyisikään. Pythonissa on rekursioiden riistätytyminen käsistä estetty (sys.setrecursionlimit ja sys.getrecursionlimit).

      Tässäpä vaikka simppeli tapa tehdä vastaava ja esimerkiksi vaikka tuo negatiivisten lukujen tarkistus - poikkeukset, ne poikkeukset:

      def kertoma(n):
      ....f n < 0:
      .......raise ValueError('kertoma() ei ole määritelty negatiivisilla arvoilla')
      ... foo = 1
      ... for i in xrange(1, n 1):
      ........foo *= i
      ....return foo

      Ja ihan tiedoksi, jos kertomaa haet vain käyttöä varten etkä muuten vain kikkaillaksesi. Valmis funktiokin löytyy:
      >>> import math
      >>> math.factorial(10)
      3628800

      • kekkekee

        Muista vielä tarkistaa että luku on kokonaisluku. Viimeksi kun tarkistin, kertomia ei laskettu desimaaliluvuille :)


      • buudda

        on silti ylivuoto. Ohjelma olisi kyrvähtänyt jos rekursiota ei erityisesti pysäytettäisi. Toki varsinaista kalssista ylivuotoilmoitusta ei taitaisi tulla, mutta lopputulos on käytännössä sama.
        Kekkekeelle pisteitä, koska opin vaihteeksi uutta.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Purra hyökkää nyt suomalaisen duunarin kimppuun teettämällä mamuilla palkatonta työtä

      Niinpä niin. Persut duunaripuolue, HAH. Joko alkaa kovapäisinkin persu älyämään, että persut ovat Suomen kansan vastain
      Maailman menoa
      347
      12155
    2. Mitä hyvää rikkaiden hyysääminen Suomelle tuonut?

      Minäpä vastaan: ei yhtikäs mitään, vaan pelkkää vahinkoa. Demareiden ansiosta Suomen valtio oli käytännössä vielä 1980-
      Maailman menoa
      163
      11190
    3. Tytti Tuppurainen häpäisi Suomen epäisänmaallisella lausunnollaan USA:n ulkoministerille Rubiolle.

      https://www.is.fi/politiikka/art-2000011816267.html Miksi Tytti Tuppurainen päästetään antamaan typeriä lausuntoja noin
      Maailman menoa
      279
      6542
    4. Purra ehdottaa vaan Tanskan mallia, joka on erittäin hyvä malli

      Purra ehdotti helmikuussa Suomeen Tanskan mallia, jossa maahanmuuttajilta vaaditaan työntekoa sosiaalitukien saamiseksi.
      Maailman menoa
      255
      5337
    5. Kokoomusnuoret: Sosiaalitukien työvelvoitteen tulisi koskea kaikkia

      Riikka Purra on esittänyt, että maahanmuuttajilta tulisi edellyttää palkatonta työtä sosiaalitukien vastineeksi. Kokoom
      Maailman menoa
      195
      3822
    6. Pystyisitkö olla

      Kanssani kaiken sotkun jälkeen? Ainakaan tunteet ei ole loppuneet
      Ikävä
      176
      3623
    7. L/OVER ikuisesti minun

      Aivan järkyttävä sarja. Ei voi olla katsomatta, mutta tuo omat muistot mieleen. Näyttelijät näyttelevät turhankin hyvin
      Ikävä
      61
      2679
    8. Purra vaatii: Työvelvoite maahanmuuttajille ja kantasuomalaisille pitkäaikaistyöttömille

      Jos Perussuomalaiset ja Kokoomus ovat seuraavan hallituksen kaksi johtavaa puoluetta, on suomalaisille pitkäaikaistyöttö
      Perussuomalaiset
      169
      2340
    9. Nyt on kova paikka "suvaitsevaisille" naisille", kun naisille tuli oma taksi

      ja syy siihen on kehitysmaalaiset taksisuharit, joista on koitunut paljon "ongelmia" naismatkustajille. Nimittäin "suva
      Maailman menoa
      44
      2185
    10. Jyrki Linnankivi, Jyrki 69 - Goottirokkarista kirkonmieheksi Lappiin!

      Jyrki Linnankivi eli Jyrki 69 on The 69 Eyes -rockyhtyeen vokalisti. Lauluhommien lisäksi hän sanoittaa, säveltää ja sov
      Työ ja opiskelu
      13
      1904
    Aihe