Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet az első N darab...

Hogyan lehet az első N darab páratlan szám összegét rekurzívan kiszámolni?

Figyelt kérdés

2022. szept. 20. 12:57
 1/7 anonim ***** válasza:
24%
Hátulról kell indítani és addig vinni a rekurziót amíg nem lesz 1.
2022. szept. 20. 13:06
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
48%

Pseudo kódban:


func firstNOddSum(n, sum): if n==1 return sum+1 else return firstNOddSum(n-2,sum+n)

2022. szept. 20. 14:04
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:
Lehet, hogy azt néztem be, hogy a nem elég csak a sum-ot átadni neki, hanem kell az N is?
2022. szept. 20. 14:37
 4/7 anonim ***** válasza:
48%

Különben honnan tudná, hogy hol jár és mikor kell megállni?

Ha csak egy sum-ot adsz át és kap a függvény egy 9-et, honnan tudod, hogy most 9-ről indultunk és 7-nél kell folytatni, vagy 5-ről indultunk és meg kell állni?

2022. szept. 20. 14:42
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
68%
return n*n; és kész
2022. szept. 20. 22:41
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
100%
#5 És tényleg! Ha mondjuk az első 5 páratlan szám kell az 1+3+5+7+9=25 lesz.
2022. szept. 21. 08:01
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

Kiinduló szabály: Első 0 db páratlan szám összege: 0


Indukciós lépés: Ha ismerjük az első n db páratlan szám összegét, abból megkaphatjuk az első n + 1 db páratlan szám összegét, csak adjuk hozzá még az n + 1-edik páratlan számot


Egyszerűsödik a formalizmus, ha 0-alapú indexelést használunk, ekkor a szabályok igy fognak kinézni:


Kiinduló szabály: Első 0 db páratlan szám összege: 0 (ez változatlan)


Indukciós lépés: Ha ismerjük az első n db páratlan szám összegét, abból megkaphatjuk az első n + 1 db páratlan szám összegét, csak adjuk hozzá még az n-edik páratlan számot (0-alapú indexelésben értve)


0 alapú indexelésnél a 0-ik páratlan szám az 1, az 1-edik páratlan szám a 3, szóval az k-adik páratlan szám a 2k+1


Ezak alapján már egész konrétan felírhtó a rekurzió:


Kiinduló szabály: Első 0 db páratlan szám összege: 0


Indukciós lépés: Ha ismerjük az első n db páratlan szám összegét, abból megkaphatjuk az első n + 1 db páratlan szám összegét, csak adjuk hozzá még magát a 2n + 1 számot.


Szóval:


P(0) = 0

P(n + 1) = P(n) + 2n+1


E alapján már simán egy Haskell programmal is lehet ellenőrizni:


your-prompt$ ghci -XNPlusKPatterns

GHCi, version 8.6.5: [link] :? for help

Loaded package environment from /home/physis/Documents/my-upwork/hpr/gitlab/assignment2/.ghc.environment.x86_64-linux-8.6.5

Prelude> let {p 0 = 0; p(n+1) = p n + 2*n+1}

Prelude> p 0

0

Prelude> p 1

1

Prelude> p 2

4

Prelude> p 3

9

Prelude> p 4

16

Prelude> p 5

25

Prelude> :q

Leaving GHCi.

your-prompt$

2022. szept. 22. 10:04
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!