| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
potenssirekursioEsko 24.03.08 10:56 Tehty esimerkiksi oheisen linkin keskustelun aloittajalle yksinkertainen potenssimetodi, jossa negatiiviset potenssit lasketaan rekursiolla. Tarkoitus olla havainnollinen, ei monimutkainen. Ja linkki: http://mureakuha.com/keskustelut/4?15700
/** * Tämä luokka on toteutettu täysin olio-ohjelmoinnin * periaatteiden mukaisesti. Pääidea on kuitenkin esitellä * rekursiota helposti ymmärrettävällä esimerkillä, yleensä * rekursiota demonstroidaan joko yksinkertaisella kertomalla * tai Fibonaccin lukusarjalla, kumpikin tosin vaatii hieman * ylimääräistä ajatteluvoimaa lukijalta, joten tässä vielä * yksi näkemys rekursioesimerkiksi. * * Kyseessä ei ole mitenkään monimutkainen ratkaisu tai edes * ongelma, mutta tämä onkin suunnattu nimenomaan * aloittelijoille, jotka tarvitsevat vielä yhden esimerkin, * jolla selittää rekursio itselleen. * * @author Esko Suomi * (sukunimi PISTE etunimi AT gmail PISTE com) * @version 24.3.2008 */ public class PotenssiRekursio { public void aja() { System.out.println("2^3: "+potenssi(2,3)); System.out.println("2^0: "+potenssi(2,0)); System.out.println("2^(-3): "+potenssi(2,-3)); // tulostaa seuraavat kolme riviä: //2^3: 8.0 //2^0: 1.0 //2^(-3): 0.125 } /** * Rekursiota hyödyntävä potenssimetodi. * * @param kanta korotettava luku * @param potenssi potenssi, jolla korotetaan * @return tulos */ private double potenssi(double kanta, double potenssi) { double apu = 0; // potenssilaskun perustilanne: // esim. 2^3 = 2*2*2 = 8 if(potenssi>0) { // Ensimmäinen kertoma hoidetaan yksinkertaisella // sijoituksella, jonka takia myös for-silmukan // ehdossa on -1. apu = kanta; for(int i=0;i<(potenssi-1);i++) { apu = apu*kanta; } } // potenssin erikoistilanne, nollakerroin // x^0 = 1, tulos on aina 1 else if(potenssi==0) { return 1; } // negatiivisen potenssin käsittely, // esim. 2^(-3) = 1 / (2^3) = 0,125 // Tässä tapauksessa käytössä rekursio, eli kutsutaan // samaa funktiota (Javassa siis metodia) uudelleen // nimittäjän selvittämiseksi. Potenssi kerrotaan // -1:llä, jotta negatiivinen luku saataisiin muutettua // positiiviseksi. else if(potenssi<0) { apu = 1 / (potenssi(kanta, (-1*potenssi))); } return apu; } /** * Päämetodi, josta kaikki alkaa. Oikeaan tyyliin ohjelmoidessa * mainissa ei ole paljoa mitään sisältöä. * * @param args komentoriviltä kaapattavat parametrit */ public static void main(String[] args) { PotenssiRekursio olio = new PotenssiRekursio(); olio.aja(); } } editoitu: 11:46 24.3.08 maka78 11:44 24.3.08 Ihan ok esimerkki. Tuon Java (-1*potenssi) Java -(potenssi) renni 00:11 27.4.08 Tällä rivillä ainakin selvä bugi: for(int i=0;i<(potenssi-1);i++) { Esko 11:05 7.5.08 Millainenhan bugi mahtaisi olla kyseessä? :) Esko 10:14 9.5.08 ...ah, murtopotenssit vissiinkin? Mjoo, laskettakoon bugiksi. |
![]() Haku
|