Изчисляване на факториел чрез итерация и рекурсия

Ще наричаме факториел от N произведението на всички естествени от интервала [1..N]. С факториел са свързани ред практически задачи. Примерно по колко различни начина могат да бъдат подредени N предмета. Математическата функция факториел връща стойност 1, ако въведеното число N е 0 или 1.

Алгоритъм:
Инициализираме началната стойност на променливата факториел = 1.
В цикъл от 2 до N умножаваме получената до момента стойност с поредното число от цикъла.
След като цикъла приключи се извежда стойността на тази променлива - стойност на вече изчисления факториел от това число.
Една примерна задача за изчисляване на факториел би имала следното условие:
Да се състави програма за изчисляване на факториел по въведено число n: n*(n-1)*(n-2)*..*2*1.
Входни данни: естествено число от интервала [2 - 15].
Пример: 5 Изход: 120
 
Ще разгледаме задачата за изчисляване на факториел в два варианта: чрез итерация и чрез рекурсия.
Следващите две програми дават решена задача за изчисляване на факториел.
 
изчисляване на факториел чрез итерация
#include <iostream>
using namespace std;

long int have_fak_I( int chis ) //!!! long - mnogo byrzo narastwa stojnostta
{long fak=1;//nachalna inicializaciq
  int i;
  cout<<"Presmqtam s chislo : "<<chis<<endl;
  for (i=1;i<=chis;i++) 
 { fak*=i; 
   cout<<"Chislo : "<<i<<"! = "<<fak<<endl;
  }
return fak;  
}//kraj na funkciq factoriel 

int main ()
{ int n;
 cout<<"Da se systawi programa, izpolzwasha rekursiwna funkciq, koqto\n";
 cout<<"izwevda faktoriel na wywedeno chislo n! = n*(n-1)*(n-2)*..*2*1.\n";
 cout<<"Whodni danni: estestweno chislo ot interwala [3..15].\n";
 cout<<"Primer: 5 Izhod 120.\n";
 cout<<"Wywedete estestweno chislo ot interwala [3..15]: "; cin>>n;
 cout<<"Poluchenata chislo za factoriel "<<n<<"! e: "<<have_fak_I(n)<<endl;
system("pause");//chaka natiskane na klawish
return 0;//osbovdawa zaetite sistemni resursi i wrysha kod na greshka 0
}//kraj na programa factoriel 

Начало на страницата


изчисляване на факториел чрез рекурсия
#include <iostream>
using namespace std;

long int have_fak_R( int chis ) //!!! long - mnogo byrzo narastwa stojnostta
{//tqlo na rekursiwnata funkciq - stojnostta na faktoriela raste byrzo
cout<<"Presmqtam s chislo : "<<chis<<endl;
 if ( chis > 1 )
 {return have_fak_R( chis-1 )*chis;
//rekursiwno izwikwane, no s chislo s 1 po-malko ot tekushoto
 }
else {  return 1;   // dyno na rekursiata factoriel 0 = 1
  } 
}//kraj na rekursiwnata funkciq factoriel 

int main ()
{ int n;
cout<<"Da se systawi programa, izpolzwasha rekursiwna funkciq, koqto\n";
cout<<"izwevda faktoriela na wywedeno chislo n! = n*(n-1)*(n-2)*..*2*1.\n";
cout<<"Whodni danni: estestweno chislo ot interwala [3..15].\n";
cout<<"Primer: 5 Izhod 120.\n";
cout<<"Wywedete estestweno chislo ot interwala [3..15]: "; cin>>n;
cout<<"Poluchenata chislo za factoriel "<<n<<"! e: "<<have_fak_R(n)<<endl;
system("pause");//chaka natiskane na klawish
return 0;//osbovdawa zaetite sistemni resursi i wrysha kod na greshka 0
}//kraj na programa factoriel 

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: