Professional Documents
Culture Documents
Programming Methodology Lab 6: Recursion:, Qwurgxfwlrq
Programming Methodology Lab 6: Recursion:, Qwurgxfwlrq
)DFXOW\RI,QIRUPDWLRQ7HFKQRORJ\
PROGRAMMING METHODOLOGY
Lab 6: Recursion
,QWURGXFWLRQ
,QSUHYLRXVODEWXWRULDOZH
YHRUJDQL]HGRXUSURJUDPLQWRIXQFWLRQVZKLFKFDOORQHDQRWKHULQ
DGLVFLSOLQHG)RUVRPHW\SHVRISUREOHPVLW
VXVHIXOWRKDYHIXQFWLRQVFDOOWKHPVHOYHVDQGLW
V
FDOOHGDVUHFXUVLYHIXQFWLRQ,QWKLVODEWXWRULDOZH
OOFRQVLGHUWKHUHFXUVLRQFRQFHSWXDOO\ILUVWWKHQ
H[DPLQHVHYHUDOSURJUDPVFRQWDLQLQJUHFXUVLYHIXQFWLRQ
5HFXUVLYH)XQFWLRQ
$UHFXUVLYHIXQFWLRQLVDIXQFWLRQWKDWFDOOVLWVHOIHLWKHUGLUHFWO\RULQGLUHFWO\WKURXJKDQRWKHU
IXQFWLRQ 5HFXUVLYH IXQFWLRQ NQRZV KRZ WR VROYH RQO\ WKH VLPSOHVW FDVHV RU VRFDOOHG EDVH
FDVHV,IWKHIXQFWLRQLVFDOOHGZLWKDEDVHFDVHWKHIXQFWLRQVLPSO\UHWXUQVDUHVXOW,IWKHIXQFWLRQ
LV FDOOHG ZLWK D PRUH FRPSOH[ SUREOHP WKH IXQFWLRQ GLYLGHV WKH SUREOHP LQWR WZR FRQFHSWXDO
SLHFHVDSLHFHWKDWWKHIXQFWLRQNQRZVKRZWRGRDQGDSLHFHWKDWLWGRHVQRWNQRZKRZWRGR,Q
WKHVHFRQGSLHFHLWFRQWDLQVWKHRULJLQDOSUREOHPEXWLQDVLPSOHURUVPDOOHUYHUVLRQ%HFDXVHWKLV
QHZSUREOHPORRNVOLNHWKHRULJLQDOSUREOHPZHFDOOLWDVUHFXUVLYHFDOO
7KHUHFXUVLRQFDOOFDQH[HFXWHLQPDQ\WLPHVVLQFHWKHIXQFWLRQNHHSVGLYLGLQJHDFKSUREOHPLQWR
WZRSLHFHV)RUWKHUHFXUVLRQFDOOWRWHUPLQDWHHDFKWLPHLWFDOOVLWVHOIZLWKDVLPSOHUYHUVLRQRI
RULJLQDOSUREOHPDQGWKLVVHTXHQFHPXVWFRQYHUJHRQWKHEDVHFDVH:KHQWKHIXQFWLRQUHFRJQL]HV
WKHEDVHFDVHLWUHWXUQVDUHVXOWWRWKHSUHYLRXVFRS\RIWKHIXQFWLRQDQGDVHTXHQFHRIUHWXUQV
HQVXHVDOOWKHZD\XSWKHOLQHXQWLOWKHRULJLQDOFDOORIWKHIXQFWLRQHYHQWXDOO\UHWXUQV WKHILQDO
UHVXOW
5HFXUVLYHO\FDOFXODWLQJIDFWRULDOV
7KHIDFWRULDORIDQRQQHJDWLYHLQWHJHUQXPEHUGHQRWHGE\QLVGHILQHGDVIROORZV
݊Ǩ ൌ ݊ ή ሺ݊ െ ͳሻ ή ሺ݊ െ ʹሻ ή ǥ ή ͳ ൌ ݊ ή ሺ݊ െ ͳሻǨ
float factorial = 1;
for(i = 2; i <= n; i++)
{
factorial = factorial * i;
}
)URPWKHIRUVWDWHPHQWZHFDQHDVLO\VHHWKDWHDFKWLPHWKHVWDWHPHQWLQVLGHIRUH[HFXWHVLWWDNHV
WKHODVWfactorialUHVXOWDQGPXOWLSO\ZLWKWKHQHZiYDOXHWKXVZHFDQGHILQHWKHIDFWRULDORI
QDVWKHWKLUGSDUWLQWKHIRUPXODWKDWLVͷǨ ൌ ͷ כͶ ͳ כ ʹ כ ͵ כൌ ͷ כͶǨ ൌ ͳʹͲ7KHHYDOXDWLRQRI
ͷǨZRXOGSURFHHGDVLQ)LJXUHLQWKHOHIWILJXUHWKHUHFXUVLYHFDOOH[HFXWHVXQWLOͳǨDQGLWUHWXUQV
WKHEDVHFDVHDQGWHUPLQDWHWKHUHFXUVLRQ,QWKHOHIWILJXUHLWVKRZVWKHYDOXHVUHWXUQHGIURP
HDFKUHFXUVLYHFDOOWRLWVFDOOHUXQWLOWKHILQDOYDOXHLVFDOFXODWHGDQGUHWXUQHG
)LJXUH5HFXUVLYHHYDOXDWLRQRI
7KHSURJUDPEHORZZLOOLOOXVWUDWHKRZWRSURJUDPDUHFXUVLYHIXQFWLRQ
)LERQDFFLVHULHV
7KH )LERQDFFL VHULHV EHJLQV ZLWK DQG DQGKDV WKHSURSHUW\WKDW HDFKVXEVHTXHQW )LERQDFFL
QXPEHULVWKHVXPRIWKHSUHYLRXVWZR)LERQDFFLQXPEHUV7KH)LERQDFFLVHULHVPD\EHGHILQHG
UHFXUVLYHO\DVIROORZV
݂ܾ݅݅ܿܿܽ݊ሺͲሻ ൌ Ͳ
݂ܾ݅݅ܿܿܽ݊ሺͳሻ ൌ ͳ
݂ܾ݅݅ܿܿܽ݊ሺ݊ሻ ൌ ݂ܾ݅݅ܿܿܽ݊ሺ݊ െ ͳሻ ݂ܾ݅݅ܿܿܽ݊ሺ݊ െ ʹሻ
)URP WKH DERYH IRUPXOD FDOFXODWHV WKH QWK )LERQDFFL QXPEHU UHFXUVLYHO\ XVLQJ IXQFWLRQ
fibonacci1RWLFHWKDW)LERQDFFLQXPEHUVWHQGWREHFRPHODUJHTXLFNO\WKXVZHFKRRVHGDWD
W\SHfloatIRUWKHSDUDPHWHUW\SHDQGWKHUHWXUQW\SHDOVR
1 #include <stdio.h>
2
3 float fibonacci(float);
4
5 int main()
6 {
7 int n = 10;
8 printf("Factorial(%d) = %f", n, fibonacci(n));
9
10 return 0;
11 }
12
13 float fibonacci(float n)
14 {
15 if(n == 0) return 0;
16 if(n == 1) return 1;
17 return fibonacci(n-1) + fibonacci(n-2);
18 }
)LJXUH(YDOXDWLQJILERQDFFL
5HFXUVLRQYV,WHUDWLRQ
:HKDYHVWXGLHGWZRNLQGRIIXQFWLRQVZKLFKLPSOHPHQWHGLQHLWKHUUHFXUVLYHRULWHUDWLYHO\,Q
WKLVVHFWLRQZHFRPSDUHWKHWZRDSSURDFKHVDQGGLVFXVVZK\\RXPLJKWFKRRVHRQHDSSURDFKRYHU
WKHRWKHULQDSDUWLFXODUVLWXDWLRQ
5HFXUVLRQ KDV PDQ\ QHJDWLYHV ,W UHSHDWHGO\ LQYRNHV WKH PHFKDQLVP DQG FRQVHTXHQWO\ WKH
RYHUKHDGRIIXQFWLRQFDOOV7KLVFDQEHH[SHQVLYHLQERWKSURFHVVRUWLPHDQGPHPRU\VSDFH(DFK
UHFXUVLYHFDOOFDXVHVDQRWKHUFRS\RIWKHIXQFWLRQRQO\WKHIXQFWLRQ
VYDULDEOHVWREHFUHDWHGWKLV
FDQFRQVXPHFRQVLGHUDEOHPHPRU\,WHUDWLRQQRUPDOO\RFFXUVZLWKLQDIXQFWLRQVRWKHRYHUKHDG
RIUHSHDWHGIXQFWLRQFDOOVDQGH[WUDPHPRU\DVVLJQPHQWLVRPLWWHG
([HUFLVHV
'HILQHDUHFXUVLYHIXQFWLRQWKDWFKHFNZKHWKHUDQXPEHULVSULPH
'HILQHDUHFXUVLYHIXQFWLRQWRFRPSXWHIDFWRULDORIQ
'HILQHDUHFXUVLYHIXQFWLRQWRFRPSXWHQ
'HILQHDUHFXUVLYHIXQFWLRQWRFRPSXWH[Q
'HILQHDUHFXUVLYHIXQFWLRQWRUHWXUQWKHQXPEHURIGLJLWVRIDSRVLWLYHLQWHJHUQXPEHU
'HILQHDUHFXUVLYHIXQFWLRQWRFDOFXODWHWKHIROORZLQJH[SUHVVLRQV
G σୀଵ ξ݅
5HIHUHQFH