Saltar al contenido principal
Алгоритмын үндэс

     Лекц № 14
Ðåêóðñèâ àðãûí îíöëîã

• Àëãîðèòì õèð õ¿íä, íèéëìý áàéõ íü
                              ë
  à) õè÷íýýí ðåêóðñèâ äóóäàëò áàéõ,
  á) òýäãýýð íü ïðîãðàììûí õààíà äóóäàãäàõ
                     Òîäîðõîé
  çýðãýýñ õàìààðíà.  õÿçãààðëàëò
• Ðåêóðñèâýýð áîäëîãûã áîäîõäîî
  òºãñãºõ íºõöëèéã òàâèõ øààðäëàãàòàé.
  Ýñ òýãâýë ýíý íü ¿ë òºãñºõ ïðîãðàìì
  áîëíî.
Ðåêóðñèâ àðãûí ñóë òàëóóä
• Çàðèì ïðîãðàìì÷èëàëûí õýëí¿¿ä ðåêóðñ-èéã
  çºâøººðäºãã¿é. Æ: Ìàøèíû õýë¿¿ä. F ortran,
  Cobol ãýõ ìýò.
• ªðòºã ºíäºðòýé àðãà: Ïðîãðàììûí áèåëýõ
  õóðä óäààí, ñàíàõ îé èõ øààðääàã.
• Çàðèì òîõèîëäîëä ýíý àðãûã àøèãëàõ íü
  áîäëîãûã õýò õ¿íäð¿¿ëñýí, íèéëìýë áîëãîñîí
  áàéõ òàëòàé áàéäàã.
Æèøýý
unsigned int factorial (unsigned int n)
{           unsigned int f;
      if (n>1) f=n* factorial (n-1);
      else f=1;
return (f);
}
Æèøýý
n=3 f=3* factorial (2)
     n=2 f=2* factorial (1)
           n=1
                f=1
           return(1)
     f=2* 1 return(2)
f=3* 2 return(6)
Æèøýý
int fibonacci (unsigned int n)
{ unsigned int fib;
  if (n<2) fib=n;
  else
   fib=fibonacci (n-1)+fibonacci (n-2);
return (fib);
}
Æèøýý
n=3       fib=fibonacci (2)+fibonacci (1)
  n=2 fib=fibonacci (1)+fibonacci (0)
     n=1
      fib=1
          n=0
                fib=0
           return(0)
       fib=1 return(1)
   fib=1+0 return(1)
fib=1+1 return(2)
Æèøýý
int factorial (unsigned int n)
{ unsigned int i, fac;
  fac=1;
  for(i=1;i<=n;i++) fac=fac*i;
return (fac);
}
Æèøýý
int fibonacci (unsigned int n)
{ unsigned int i, older, new, old, fib;
  older=1; old=0; new=0;
       for(i=1;i<=n;i++)
           { new=old+older;
             older=old;
             old=new;
           }
       fib=new;
return (fib);
}
Æèøýý:Õàíîéí öàìõàã
 19-ð çóóíä E  dward L ucas àíõ ýíý
 áîäëîãûã äýâø¿¿ëæ áàéñàí áºãººä
 ¿¿íèéã ðåêóðñèâ àðãûã àøèãëàí áîääîã
 áºãººä ýíý íü ðåêóðñèâ àëãîðèòìûí
 ñîíãîäîã æèøýý áîëîí ñóäëàãääàã.
 ßàãààä ãýâýë ýíý áîäëîãûã ðåêóðñ
 àøèãëàõã¿éãýýð áîäîõîä     òèéì ÷
 óõààëàã áîäîëò ãàðäàãã¿é áàéíà.
Æèøýý:Õàíîéí öàìõàã
  A,B,C гэсэн З гол байв. А голд нь дороосоо
  дээшлэх
тутам хэмжээ нь багасах N ширхэг цагираг
  байв. Энэ
байрлалаар нь В голд шилжүүлэхдээ дараахь
  дүрмийг
баримтлана :
      1. Энэ зорилгоор С голыг ашиглаж болно
      2. Зөөхдөө аль нэг голоос хамгийн дээд
  талынх нь цагирагийг л зөөнө.
      З. Зөөх явцад том цагирагийг жижиг дээр
  хэзээ ч тавьж болохгүй.
   Зөөх үйлдэл бүрийг дэлгэцэнд хэвлэнэ.
Æèøýý




 a      b   c
Æèøýý




 a      b   c
Æèøýý
void Hanoi (int source,dest,temp,n)
{    if (n=1) move (source,dest);
     else { hanoi (source,temp,dest,n-1);
            move(source,dest);
            hanoi (temp,dest,source,n-1);
         }
}
Æèøýý

 Ãýâ÷     ýíý    áîäëîãûã     ðåêóðñ
 àøèãëàõã¿é-ãýýð áîäîõ îðîëäëîãóóä
 íèëýýä ãàð÷ áàéæýý. Òóõàéëáàë
 1984 îíä K ruse ýíý áîäëîãûí ðåêóðñ
 áèø õóâèëáàðûã äýâø¿¿ëæ, 1986 îíä
 Reingold & H ansen èë¿¿ íàðèéâ÷èëàí
 ñóäàëæ áàéæýý.