Ez dugu ariketa errekurtsibo asko aurkituko gure programetan, baina interesgarria da kontzeptu hori lantzea azpiprogramak aktibatzen direnean zer gertatzen den ikasteko.
Egoera errekurtsiboak bizitzan eta naturan ematen dira eta jarraian adibide grafikoak erakusten dira:
Faktoriala funtzio errekurtsibo bezala iZenbaki zenbaki baten faktoriala kalkulatzen duen funtzio errekurtsiboa erakusten da jarraian. Faktorialaren kalkulu errekurtsiboa algoritmo honetan oinarritzen da:
FaktorialErrekurtsiboa.pas programa hartu eta zuk zeuk exekutatu. |
Fibonacciren zenbakiak funtzio errekurtsibo bidez
Fibonacciren segidaren adierazpen orokorra gogoratuz:
Hauxe da fniFibonacci funtzio errekurtsiboa:
1 2 3 4 5 6 7 8 9 | {-------------------------FUNTZIO ERREKURTSIBOA-------------------------} function fniFibonacci(iZbk: integer ): integer ; begin if (iZbk = 0 ) or (iZbk = 1 ) then fniFibonacci := iZbk else fniFibonacci := fniFibonacci(iZbk- 1 ) + fniFibonacci(iZbk- 2 ) ; end ; |
Teklatuaren bitartez iZenbat kopuru oso bat irakurri eta Fibonacci-ren lehen iZenbat zenbakiak pantailaratu. Hauxe da programa eta bere exekuzioaren irteera bat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | program FibonacciErrekurtsiboa ; uses crt ; const AZKENMUGA = 24 ; { integer datu-motak ez du gehiago ematen } {-------------------------FUNTZIO ERREKURTSIBOA-------------------------} function fniFibonacci(iZbk: integer ): integer ; begin if (iZbk = 0 ) or (iZbk = 1 ) then fniFibonacci := iZbk else fniFibonacci := fniFibonacci(iZbk- 1 ) + fniFibonacci(iZbk- 2 ) ; end ; {---------------------------PROGRAMA NAGUSIA---------------------------} var iZenbat, iKont: integer ; cErantzuna: char ; begin writeln ; repeat repeat write ( 'Eman Fibonacci segidaren zenbaki kopurua (1 eta ' , AZKENMUGA, ' artekoa): ' ) ; readln(iZenbat) ; until (iZenbat >= 1 ) and (iZenbat <= AZKENMUGA) ; writeln ; for iKont:= 1 to iZenbat do begin if (iKont = 1 ) or (iKont = 2 ) then writeln (iKont: 20 , ' >>>>>> ' , fniFibonacci(iKont- 1 )) else writeln (iKont: 20 , ' -----> ' , fniFibonacci(iKont- 1 )) ; end ; writeln ; write ( 'Amaitu nahi duzu? (B/E): ' ) ; repeat cErantzuna := readkey ; writeln (cErantzuna) ; cErantzuna := upcase(cErantzuna) ; until (cErantzuna = 'B' ) or (cErantzuna = 'E' ) ; writeln ; writeln ; until cErantzuna = 'B' ; write ( 'Programa bukatu da' ) ; repeat until keypressed ; end . |
Goiko programa hobeto ulertzeko, aztertu ere FibonacciErrekurtsiboa_formatua.pas bertsioa non pantailan idazketa batzuk egiten diren, eta horiei esker programa exekutatzean ikus daiteke kodearen zein puntutan aurkitzen garen.