ቁልፍ ልዩነት - መደጋገም እና መደጋገም
Recursion እና Iteration የፕሮግራም ችግሮችን ለመፍታት መጠቀም ይቻላል። ድጋሚ ወይም ድግግሞሽን በመጠቀም ችግሩን የመፍታት አቀራረብ ችግሩን ለመፍታት በሚወስደው መንገድ ላይ የተመሰረተ ነው. በድግግሞሽ እና በመድገም መካከል ያለው ቁልፍ ልዩነት መደጋገም በተመሳሳይ ተግባር ውስጥ አንድን ተግባር ለመጥራት ዘዴ ሲሆን ተደጋጋሚነት የተሰጠው ሁኔታ እውነት እስኪሆን ድረስ መመሪያዎችን ደጋግሞ መተግበር ነው። መደጋገም እና መደጋገም ስልተ ቀመሮችን ለማዘጋጀት እና የሶፍትዌር አፕሊኬሽኖችን ለመገንባት ዋና ቴክኒኮች ናቸው።
Recursion ምንድን ነው?
አንድ ተግባር በተግባሩ ውስጥ እራሱን ሲጠራው ሪከርሽን በመባል ይታወቃል። ሁለት ዓይነት ድግግሞሽ አለ. እነሱ ውሱን መደጋገም እና ማለቂያ የሌለው ድግግሞሽ ናቸው። ውሱን መደጋገም የማቆም ሁኔታ አለው። ማለቂያ የሌለው ተደጋጋሚነት የማለቂያ ሁኔታ የለውም።
ፋብሪካዎችን ለማስላት በፕሮግራሙ በመጠቀም መደጋገም ሊብራራ ይችላል።
n!=n(n-1)!፣ n>0 ከሆነ
n!=1፣ n=0 ከሆነ;
የ3(3!=321) ቁጥር ለማስላት ቤሎውን ኮድ ይመልከቱ።
intmain () {
int እሴት=ፋብሪካ (3)፤
printf("ፋብሪካው %d\n"፣እሴት)፤
መመለስ 0፤
}
መሠረተ ልማት (intn) {
ከሆነ(n==0) {
መመለስ 1፤
}
ሌላ {
ተመለስ n ፋክተር(n-1)፤
}
}
ወደ ፋክተሪ (3) ሲደውሉ ያ ተግባር ፋክተሪ (2) ይባላል። ፋክታሪያል (2) ሲደውሉ ያ ተግባር ፋክተሪ (1) ይባላል። ከዚያም ፋክተሪል (1) ፋክተር (0) ይደውላል። ፋብሪካል (0) ይመለሳል 1. ከላይ ባለው ፕሮግራም ውስጥ n==0 በ "if block" ውስጥ ያለው ሁኔታ የመሠረት ሁኔታ ነው.እንደዚሁ፣ የፋብሪካው ተግባር ደጋግሞ ይጠራል።
የተደጋጋሚ ተግባራት ከቁልል ጋር የተያያዙ ናቸው። በ C ውስጥ ዋናው ፕሮግራም ብዙ ተግባራት ሊኖሩት ይችላል. ስለዚህ ዋና () የጥሪ ተግባር ሲሆን በዋናው ፕሮግራም የሚጠራው ተግባር ደግሞ ተግባር ይባላል። ተግባሩ በሚጠራበት ጊዜ መቆጣጠሪያው ለተጠራው ተግባር ይሰጣል. የተግባር አፈፃፀሙ ከተጠናቀቀ በኋላ መቆጣጠሪያው ወደ ዋናው ይመለሳል. ከዚያ ዋናው ፕሮግራም ይቀጥላል. ስለዚህ፣ አፈፃፀሙን ለመቀጠል የማግበር መዝገብ ወይም ቁልል ፍሬም ይፈጥራል።
ስእል 01፡ ድግግሞሽ
ከላይ ባለው ፕሮግራም ፋብሪካ (3)ን ከዋናው ሲደውሉ በጥሪው ቁልል ውስጥ የማግበር መዝገብ ይፈጥራል። ከዚያም ፋብሪካ (2) የተቆለለ ፍሬም በቆለሉ ላይ እና በመሳሰሉት ላይ ይፈጠራል። የማግበሪያ መዝገብ ስለአካባቢያዊ ተለዋዋጮች ወዘተ መረጃን ይይዛል።እያንዳንዱ ተግባር በተጠራ ቁጥር አዲስ የአካባቢ ተለዋዋጮች ስብስብ በቆለሉ አናት ላይ ይፈጠራል። እነዚህ የተቆለሉ ፍሬሞች ፍጥነቱን ሊቀንሱት ይችላሉ። በተመሳሳይም በድግግሞሽ, አንድ ተግባር እራሱን ይጠራል. ለተደጋጋሚ ተግባር የጊዜ ውስብስብነት በጊዜ ብዛት ተገኝቷል, ተግባሩ ይባላል. የአንድ ተግባር ጥሪ የጊዜ ውስብስብነት O(1) ነው። ለተደጋጋሚ ጥሪዎች n ቁጥር፣ ውስብስብነቱ O(n) ነው።
ምንድን ነው መደጋገም?
ድግግሞሹ የተሰጠው ሁኔታ እውነት እስኪሆን ድረስ ደጋግሞ የሚደጋገም የመመሪያዎች እገዳ ነው። መደጋገም “ለ loop”፣ “do-while loop” ወይም “while loop” በመጠቀም ማግኘት ይቻላል። "ለ loop" አገባብ እንደሚከተለው ነው።
ለ (ጅማሬ፤ ሁኔታ፤ ቀይር) {
// መግለጫዎች፤
}
ስእል 02፡ "ለ loop ፍሰት ዲያግራም"
የማስጀመሪያ ደረጃ መጀመሪያ ይሰራል። ይህ እርምጃ የ loop መቆጣጠሪያ ተለዋዋጮችን ማወጅ እና ማስጀመር ነው። ሁኔታው እውነት ከሆነ በጥምጥም ማሰሪያው ውስጥ ያሉት መግለጫዎች ይፈጸማሉ። እነዚህ መግለጫዎች ሁኔታው እውነት እስኪሆን ድረስ ይሠራሉ. ሁኔታው የተሳሳተ ከሆነ መቆጣጠሪያው ከ "loop" በኋላ ወደሚቀጥለው መግለጫ ይሄዳል. በ loop ውስጥ ያሉትን መግለጫዎች ከፈጸሙ በኋላ መቆጣጠሪያው ክፍልን ለማሻሻል ይሄዳል. የ loop መቆጣጠሪያ ተለዋዋጭን ለማዘመን ነው. ከዚያ ሁኔታው እንደገና ይጣራል.ሁኔታው እውነት ከሆነ በጥምጥም ማሰሪያው ውስጥ ያሉት መግለጫዎች ይፈጸማሉ። በዚህ መንገድ "ለ loop" ይደግማል።
በ"በloop" ውስጥ፣ በ loop ውስጥ ያሉት መግለጫዎች ሁኔታው እውነት እስኪሆን ድረስ ይፈጸማል።
እያለ (ሁኔታ){
//መግለጫዎች
}
በ"አድርገው" loop ውስጥ፣ ሁኔታው በሉፕ መጨረሻ ላይ ምልክት ይደረግበታል። ስለዚህ ምልክቱ ቢያንስ አንድ ጊዜ ይሰራል።
አድርግ{
//መግለጫዎች
} እያለ(ሁኔታ)
ድግግሞሹን ("ለ loop") በመጠቀም የ3 (3!) ፍሬን ለማግኘት ፕሮግራም እንደሚከተለው ነው።
int ዋና(){
intn=3፣ factorial=1፤
inti፤
ለ(i=1; i<=n; i++){
factorial=factoriali;
}
printf("ፋብሪካው %d\n"፣ ፋክተርያል)፤
መመለስ 0፤
}
በተደጋጋሚ እና መደጋገም መካከል ያለው ተመሳሳይነት ምንድን ነው?
- ሁለቱም ችግርን ለመፍታት ቴክኒኮች ናቸው።
- ተግባሩ በተደጋጋሚ ወይም በድግግሞሽ ሊፈታ ይችላል።
በተደጋጋሚ እና መደጋገም መካከል ያለው ልዩነት ምንድን ነው?
የድግግሞሽ እና መደጋገሚያ |
|
Recursion ተግባርን በተመሳሳዩ ተግባር ውስጥ የመጥራት ዘዴ ነው። | ድግግሞሹ የተሰጠው ሁኔታ እውነት እስኪሆን ድረስ የሚደጋገም የመመሪያዎች እገዳ ነው። |
የጠፈር ውስብስብነት | |
የተደጋጋሚ ፕሮግራሞች የቦታ ውስብስብነት ከመደጋገም በላይ ነው። | የጠፈር ውስብስብነት በድግግሞሽ ዝቅተኛ ነው። |
ፍጥነት | |
የተደጋጋሚ አፈጻጸም ቀርፋፋ ነው። | በተለምዶ መደጋገም ከመድገም የበለጠ ፈጣን ነው። |
ሁኔታ | |
የማቋረጫ ሁኔታ ከሌለ፣ ማለቂያ የሌለው ድግግሞሽ ሊኖር ይችላል። | ሁኔታው ፈጽሞ ሐሰት ካልሆነ፣ ማለቂያ የሌለው ድግግሞሽ ይሆናል። |
ቁልል | |
በተደጋጋሚነት፣ ቁልል ተግባሩ በሚጠራበት ጊዜ የአካባቢ ተለዋዋጮችን ለማከማቸት ይጠቅማል። | በድግግሞሽ፣ ቁልል ስራ ላይ አይውልም። |
የኮድ ተነባቢነት | |
ተደጋጋሚ ፕሮግራም የበለጠ ይነበባል። | የድግግሞሹ ፕሮግራም ከተደጋገመ ፕሮግራም የበለጠ ለማንበብ ከባድ ነው። |
ማጠቃለያ - መደጋገም እና መደጋገም
ይህ መጣጥፍ በመደጋገም እና በመደጋገም መካከል ያለውን ልዩነት ተመልክቷል።ሁለቱም የፕሮግራም ችግሮችን ለመፍታት ሊያገለግሉ ይችላሉ። በድግግሞሽ እና በመድገም መካከል ያለው ልዩነት መደጋገም አንድን ተግባር በተመሳሳዩ ተግባር ውስጥ ለመጥራት እና የተሰጠው ሁኔታ እውነት እስኪሆን ድረስ የመመሪያዎችን ስብስብ ለመድገም የሚደረግ ዘዴ ነው። አንድ ችግር በተደጋገመ መልኩ ሊፈታ ከቻለ፣ ድግግሞሹንም በመጠቀም ሊፈታ ይችላል።
የሪከርሽን vs ተደጋጋሚ የፒዲኤፍ ስሪት አውርድ
የዚህን ጽሁፍ ፒዲኤፍ ስሪት አውርደው እንደ ጥቅስ ማስታወሻ ከመስመር ውጭ ዓላማ መጠቀም ይችላሉ። እባክዎ የፒዲኤፍ እትምን እዚህ ያውርዱ በመድገም እና በመድገም መካከል ያለው ልዩነት