Рекурсията – стъпка по стъпка

  1. Просто извеждане + рекурсивно извикване
    1. да се напише програма за извеждане на сумата на числата от 1 до N
    2. да се напише програма за извеждане на N! (произведението на числата от 1 до N)
    3. да се напише програма за повдигане на X на степен 6
    4. да се напише програма за повдигане на 2 на степен N
    5. да се напише програма за отпечатване на буквите от A до Z
    6. да се напише програма за отпечатване на буквите от Z до A
    7. да се напише програма за отпечатване на N на брой звезди, на един ред
  2. Просто извеждане и преценка къде да се постави командата
    1. да се напише програма за отпечатване на екрана на:
      1. числата от 1 до N
      2. числата от N до 1
      3. числата от N до 1 и после обратно до N
      4. да се напише програма за отпечатване на буквите от Z до A и после обратно от А до Z
    2. да се напише програма за отпечатване на (((*))), за N на брой скоби, на един ред
  3. Просто извеждане и повече параметри
    1. да се напише програма за отпечатване на N на брой пъти на числото X, на един ред
    2. да се напише програма за отпечатване на N на брой пъти на произволен символ (указан като параметър), на един ред
    3. да се напише програма за повдигане на X на степен N
    4. да се напише програма за отпечатване на екрана на:
      1. числата от A до B
      2. числата от 1 до N и после обратно до 1
      3. числата от M до N и после обратно до M
      4. да се напише програма за отпечатване на буквите от A до Z и после обратно от Z до A
    5. да се напише програма за отпечатване на (((*))), за N на брой символи, на един ред, като да можем да укажем произволен друг символ вместо ‘(‘, ‘)’ и ‘*’
  4. Малко по-сложни пресмятания + рекурсивно извикване
    1. Да се напише рекурсивна функция, която установява, дали в записа на естественото число n се съдържа цифрата k
    2. Да се напишат рекурсивни функции, които:
      1. отпечатват цифрите на числото една под друга
      2. отпечатват цифрите на числото отзад напред
      3. отпечатват числото симетрично с неговото огледално – например за 1234 отпечатва 1234 4321
      4. отпечатват сумата от цифрите на числото
      5. отпечатва броят на цифрите на числото
    3. Да се напише програма, която извежда произволно число, разложено на прости множители. Например за 24 трябва да изведе 2 2 2 3
    4. Да се напише програма, която чрез рекурсивни функции отпечатва на екрана как ще изглежда сумата на числата от 1 до N. Например при N=5 трябва да изведе 1+2+3+4+5=15
    5. Да се напише програма, която чрез рекурсивни функции отпечатва на екрана N! Например при N=5 трябва да изведе 5!=120=1*2*3*4*5
    6. Да се напише програма, която чрез рекурсивни функции отпечатва триъгълник от N звездички. Например при N=4:
      *
      * *
      * * * 
      * * * * *
      * * * *
      * * *
      * *
      *
    7. Да се напише програма, която чрез рекурсивни функции отпечатва триъгълник от числата от 1 до N. Например при N=3:
      1
      1 2
      1 2 3
      1 2
      1
    8. Да се напише програма, която чрез рекурсивни функции отпечатва триъгълник с размер N. Например при N=3:
      |\
      | \
      | /
      |/
Публикувано в СИП с етикети . Постоянна връзка.

56 Responses to Рекурсията – стъпка по стъпка

  1. Ivelina Krsteva каза:
    //1A
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    //да се напише програма за извеждане на сумата на числата от 1 до N
    int print_sum(int n)
    {
      if (n==0) return 0;
      return print_sum(n-1)+n;
    }
    
    int main(int argc, char** argv) {
      int n;
      cin>>n;
      cout<<print_sum(n)<<endl;
    
    	return 0;
    }
    
  2. Ivelina Krsteva каза:
    //1B
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    //да се напише програма за извеждане на N! (произведението на числата от 1 до N)
    int n_faktoriel(int n)
    {
      if (n==1) return 1;
      return n_faktoriel(n-1)*n;
    }
    
    int main(int argc, char** argv) {
      int n;
      cin>>n;
      cout<<n_faktoriel(n)<<endl;
    
    	return 0;
    }
    
  3. MartinPlamenov каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    //да се напише програма за повдигане на 2 на степен N
    
    int dveNaStepen(int n){
    	if(n==1) return 2;
     	return 2*dveNaStepen(n-1);
    	
    }
    int main() {
    	int n;
    	cin>>n;
    	cout<<dveNaStepen(n);
    	return 0;
    }
  4. Ivelina Krsteva каза:
    //2 nachina na 1C
    #include <iostream>
    
    using namespace std;
    /* reshavane na zadachata bez rekursiq
    int shest(int &n)
    {
       return n=n*n*n*n*n*n;
    }
    int chislo(int x)
    {
      if (x==1) return 1;
      return shest(x);
    }
    */
    //povdigame x na stepen n (universalno)
    int stepen(int x, int n )
    {
    
    if (n==1) return x;
    
    return x * stepen (x, n-1);
    
    }
    
    int main(int argc, char** argv) {
      int x, n;
      cin>>x>>n;
      cout<<stepen(x,n)<<endl;
    
    	return 0;
    }
    
  5. Alexander1 каза:
    #include <iostream>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    //1b
    //Simona i Alex
    using namespace std;
    
    int N(int n){
    	if(n==1)return 1; 
    	return n*N(n-1); 
    }
    int main(int argc, char** argv) {
    int n;
    cout<<"vavedete chislo ";
    cin>>n;
    cout<<"N!="<<N(n);
    	return 0;
    }
  6. MartinPlamenov каза:
    #include <iostream>
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
      //да се напише програма за отпечатване на буквите от Z до A
    using namespace std;
    char azbuka(char z){
        if (z<'a') return 0;
        cout<<z<<endl;
        return azbuka(z-1);
        
    }
    
    
      int main(){
      char z='z';
      cout<<azbuka(z);
        return 0;
    }
    
    
  7. MartinPlamenov каза:
    #include <iostream>
    #include <cstdlib>
    #include <iostream>
    #include <cmath>
      //дда се напише програма за отпечатване на N на брой звезди, на един ред
    using namespace std;
    int zvezdi(int broi){
    	if (broi==0) return 0;
    	cout<<"*";
    	return zvezdi(broi-1);
        
        
    }
    
    
      int main(){
      zvezdi(5);
    }
    
  8. MartinPlamenov каза:
    #include <cstdlib>
    #include <iostream>
    //3 A. да се напише програма за отпечатване на N на брой пъти на числото X, на един ред
    using namespace std;
    double otpechatvane(double x,double n){
    	if (n==0) return 0;
    	cout<<x;
    	return otpechatvane(x,n-1);  
    }
    int main(int argc, char** argv) {
    otpechatvane(2,0);
    	return 0;
    }
  9. Ivelina Krsteva каза:
     
    //1G да се напише програма за отпечатване на N на брой звезди, на един ред
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void stars (int N)
    {
      if (N==0) return;
      cout<<"*";
      stars(N-1);
    }
    
    int main(int argc, char** argv) {
      int n;
      cin>>n;
      stars(n);
    
    	return 0;
    }
     
  10. MartinPlamenov каза:
    #include <cstdlib>
    #include <iostream>
    //3 Б. да се напише програма за отпечатване на N на брой пъти на произволен символ (указан като параметър), на един ред
    using namespace std;
    
    void otpechatvane(char x,int n)
    {
    	if (n==0) return;
    	cout<<x;
    	return otpechatvane(x,n-1);  
    }
    
    int main(int argc, char** argv) {
    otpechatvane('*',7);
    	return 0;
    }
  11. Ivelina Krsteva каза:
     
    //да се напише програма за отпечатване на буквите от A до Z
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void A_Z (char a)
    {
         if (a>'z') return;
         cout<<a<<" ";
         A_Z(a+1);
    }
    
    int main(int argc, char** argv) {
        char a='a' ;
        A_Z(a);
    
    	return 0;
    }
    
  12. Ivelina Krsteva каза:
     
    //да се напише програма за отпечатване на буквите от Z до A
    #include<iostream>
    using namespace std;
    
    void Z_A (char a)
    {
         if (a>'z') return;
          Z_A(a+1);
         cout<<a<<" ";
        
    }
    
    int main(int argc, char** argv) {
      char a='a' ;
      Z_A(a);
    
    	return 0;
    }
    
  13. bobby666666 каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void zwezdi(int n){
    	/*Поставяме условие за край на рекурсията. Тя ще се изпълнява n-1 пъти докато достигне 0 и тогава ще се е отпечатал желаният брой звезди */
    	if (n==0) return;
    	cout<<"*";
    	zwezdi(n-1);
     
    }
    
    
    int main(int argc, char** argv) {
    	zwezdi(6);
    
    	return 0;
    } 
  14. bobby666666 каза:
     #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    /*да се напише програма за отпечатване на N на брой пъти на числото X, на един ред */
    void chislo(int n, int x){
    	/*Поставяме условие за край на рекурсията.
     Тя ще се изпълнява n-1 пъти докато достигне 0 и тогава ще се е отпечатал желаният брой пъти даденото число */
    	if (n==0) return;
    	cout<<x;
    	chislo(n-1,x);
     
    }
    
    
    int main(int argc, char** argv) {
    	chislo(9,3);
    
    	return 0;
    }
  15. MartinPlamenov каза:
    #include <cstdlib>
    #include <iostream>
    //3 Д. да се напише програма за отпечатване на екрана на: числата от M до N и после обратно до M
    using namespace std;
    void otpechatvane(int m,int n)
    {
    	if (n<m) return;
    	cout<<m<<endl;
    	otpechatvane(m+1,n);
    	cout<<m<<endl;
    }
    
    int main(int argc, char** argv) {
    otpechatvane(2,7);
    	return 0;
    }
  16. Ivelina Krsteva каза:
     
    #include<iostream>
    using namespace std;
    //да се напише програма за отпечатване на екрана на:
    //числата от 1 до N
    void edno_N(int n)
    {
      if (n==0) return;
      edno_N(n-1);
      cout<<n;
    }
    
    //числата от N до 1
    void N_1 (int n)
    {
      if (n==0) return;
      cout<<n;
      N_1(n-1);
    }
    
    //числата от N до 1 и после обратно до N
    void N_1_N(int n)
    {
    
      if(n==1) {
        cout<<"1";
        return ;
      }
      cout<<n;
      N_1_N(n-1);
      cout<<n;
    }
    int main()  {
      int a;
      cin>>a;
      
      edno_N(a);
      
      cout<<endl;
      
      N_1(a);
      
      cout<<endl;
      
      N_1_N(a);
      
        return 0;
    }
    
  17. Ivelina Krsteva каза:
     
    //2В  да се напише програма за отпечатване на (((*))), за N на брой скоби, на един ред
    
    #include<iostream>
    using namespace std;
    
    void skoba(int n)
    {
      if(n==0) {
        cout<<"*";
        return ;
      }
      cout<<"(";
      skoba(n-1);
      cout<<")";
      
    }
    int main()  {
      int a;
      cin>>a;
      skoba(a);
    
        return 0;
    }
    
     
  18. bobby666666 каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    void zwezdi(int n){
        if (n==0) return;
        cout<<"*";
        zwezdi(n-1);
      
    } /*Ползваме функцията за отпечатване на звезди на ред наготово за по-лесно */
    
    	/* 
    Ще решим задачата най-оптимално като ползваме два параметъра 
    n- ще оказва броя на звездите, които ще се отпечатват на всеки ред
    m- понеже редът на отпечатване трябва да е възходящ, m ще служи като
    стоп условие.
    */
    
     void triugulnik(int n, int m){
    	if (n>m) return;
    	zwezdi(n);cout<<endl; //поставяме нов ред след всяко извеждане 
    	triugulnik(n+1, m);
    	zwezdi(n);cout<<endl;
    }
    	
    	int main(int argc, char** argv) {
    	triugulnik(1,4);
    
    	return 0;
    }
     
    }
  19. Alexander1 каза:
    #include <cstdlib>
    #include <iostream>
    //2 cqlata
    using namespace std;
    
    // ------------------------------------------------------------------
    //chislata ot 1 do N 
    // ------------------------------------------------------------------
    int chisla(int x, int n)
    { 
    	if(x==n) return n;
    	cout<<x;
    	return chisla(x+1,n);
    }
    
    //chislata ot 1 do N
    void chisla2(int x,int n) 
    {
      if (x>n) return;
      cout<<x;
      chisla2(x+1,n);
    }
    void chisla2r(int x,int n) 
    {
      if (x>n) return;
      chisla2r(x+1,n);
      cout<<x;
    }
    
    //chislata ot N do 1
    void chisla3(int x, int n)
    {
    	if(x==0) return;
    	cout<<x;
    	chisla3(x-1,n);
    }
    
    //chislata ot 1 do N i obratno
    void chisla4(int x, int n)
    {
    	if (x==n) {
    		cout<<n;
    		return;
    	}
    
      	cout<<x;
    	chisla4(x+1,n);
      	cout<<x;
    }
    
    //a do z i obratno
    void bukvi(char n, char z){
    	if(n==z){
    		cout<<z;
    		return;
    	}
    	cout<<n;
    	bukvi(n+1,z);
    	cout<<n;
    }
    
    
    int main(int argc, char** argv) {
    int x,n;
    cout<<chisla(1,5)<<" ";
    chisla2(1,5);
    cout<<" ";
    chisla3(5,1);
    cout<<" ";
    chisla2r(1,5);
    cout<<" ";
    chisla4(1,5);
    cout<<endl;
    bukvi('a','z');
    	return 0;
    }
    
  20. kaloyank каза:
    #include <cstdlib>
    #include <iostream>
    /* 
    	2 A) да се напише програма за отпечатване на екрана на:
    
        I)числата от 1 до N
        II)числата от N до 1
        III)числата от N до 1 и после обратно до N
        IV)да се напише програма за отпечатване на буквите от Z до A и после обратно от А до Z 
    */
     
    using namespace std;
    // от 1 до N
    	void N_do_edno(int n){
    		if (n==0) return;
    		N_do_edno(n-1);
    		cout<<n;
    	}
    //от N до 1
    	void edno_do_N(int n){
    	
    	if (n==0) return;
    	cout<<n ;
    	edno_do_N(n-1);
    	
    }
    // от N до 1 и после обратно до N
    	void N_edno_N(int n){
    	  if (n==1) {
    	  	cout<<1;
    	  	return;
    	  }
    	  cout<<n ;
    	  N_edno_N(n-1);
    	  cout<<n;
    		
    	}
    
    //да се напише програма за отпечатване на буквите от Z до A и после обратно от А до Z 
    	void Z_A_Z(char z ,char a){
        if (z==a){
        	cout<<a;
        	return;
        }
    	cout<<z;
    	Z_A_Z(z-1,a);
    	cout<<z;
    }
    int main(int argc, char** argv) 
    {
    	int n;
    
    	cin>>n;
    
    	edno_do_N(n);
    	cout<<endl;
    	N_do_edno(n);
    	cout<<endl;
    	N_edno_N(n);
    	cout<<endl;
    	Z_A_Z('z','a');
    	
    	
    	return 0;
    }
    
  21. Ivelina Krsteva каза:

    //3Е да се напише програма за отпечатване на (((*))), за N на брой символи, на един ред, като да можем да укажем произволен друг символ вместо ‘(‘, ‘)’ и ‘*’

     
    #include<iostream>
    using namespace std;
    
    void skoba(int broi, char nachalo , char sreda, char krai)
    {
      if(broi==0) {
        cout<<sreda;
        return ;
      }
      cout<<nachalo;
      skoba(broi-1, nachalo, sreda, krai);
      cout<<krai;
      
    }
    int main()  {
      int a;
      cin>>a;
      skoba(a,'(','%', ')');
      cout<<endl;
      skoba(a,'&','^', '&');
    
        return 0;
    }
    
    
  22. veliXD каза:
    #include <cstdlib>
    #include <iostream>
    //n-ta stepen
    using namespace std;
    int st(int n){
    	if (n==1) return 2;
    	return 2*st(n-1);
    }
    
    int main(int argc, char** argv) {
    int n;
    cin>>n;
    cout<<st(n);
    	return 0;
    }
    
  23. veliXD каза:
    #include <cstdlib>
    #include <iostream>
    // 2-A
    using namespace std;
    void one_n(int n){
    	if (n==0) return;
    	cout<<n; one_n(n-1);
    }
    void n_one(int n){
    	if (n==0) return;
    	n_one(n-1);
    	cout<<n;
    }
    void n_n(int n){
    	if (n==1){
    	cout<<1;
    		return;
    	}
    	cout<<n;
    	n_n(n-1);
    	cout<<n;
    }
    void z_z(char n,char a){
    	if (n==a) {
    		cout<<a;
    		return;
    	}
    	cout<<n; 
    	z_z(n-1,a);
    	cout<<n;
    }
    int main(int argc, char** argv) {
    	int n, a;
    	cin>>n;
    	one_n(n);
    	cout<<endl;
    	n_one(n);
    	cout<<endl;
    	n_n(n);
    	cout<<endl;
    	z_z('z','a');
    	return 0;
    }
    
  24. Alexander1 каза:
    #include<iostream>
    using namespace std;
     
    void skoba(int n, char nachalo , char sreda, char krai)
    {
      if(n==0) {
        cout<<sreda;
        return ;
      }
      cout<<nachalo;
      skoba(n-1, nachalo, sreda, krai);
      cout<<krai;
       
    }
    int main()  {
      int n;
      cin>>n;
      skoba(n,'(','*', ')');
      cout<<endl;
      skoba(n,'L','O', 'L');
     
        return 0;
    }
  25. Alexander1 каза:
    #include <iostream>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    //3a easy
    void X(int x)
    {
    	if(x==0)return;
    	cout<<"5";
    	X(x-1);
    }
    
    //3b
    void symbol(int n,char s)
    {
    	
    	if(n==0)return;
    	cout<<s;
    	symbol(n-1,s);
    }
    
    //3c
    int stepen( int x, int n)
    {
    	if(n==1)return x;
    	return x*stepen(x,n-1);
    }
    
    //3d числата от A до B
    void A_B(int a, int b)
    {
    	if(a>b) return;
    	cout<<a;
    	A_B(a+1,b);
    }
    
    //3d числата от M до N и после обратно до M
    void M_N(int m, int n)
    {
    	if(m==n){
    	cout<<n;
    	return;
    	}
    	cout<<m;
    	M_N(m+1,n);
    	cout<<m;
    }
    int main(int argc, char** argv) {
    int x;
    X(5);
    cout<<endl;
    symbol(5,'A');
    cout<<endl;
    cout<<stepen(2,5)<<endl;
    A_B(1,5);
    cout<<endl;
    M_N(1,5);
    	return 0;
    }
  26. MartinPlamenov каза:
    #include<iostream>
    using namespace std;
     // Функция която отпечатва само звездите
    void zvezdi(int n)
    {
    		if (n==0) return;
    		cout<<"*";
    		return zvezdi(n-1);
    }
    //Отпечатва една звезда и след тона отпечатва в аритметична погресия на ред останалите звезди.След това извършна обратния процес
    void triugulnik(int n,int m){
    	if (n>m) return;
    	zvezdi(n);cout<<endl;
    	triugulnik(n+1,m);
    	zvezdi(n);cout<<endl;
    }
    int main()  {
    triugulnik(1,5);
      
        return 0;
    }
  27. MartinPlamenov каза:
    #include<iostream>
    using namespace std;
     //Да се напише програма, която чрез рекурсивни функции отпечатва триъгълник от числата от 1 до N. Например при N=3: 
    void chisla(int n)
    {		
    		if (n==0) return;
    		chisla(n-1);
    		cout<<n;
    		}
    void triugulnik(int n,int m){
    	if (n>m) return;
    	chisla(n);cout<<endl;
    	triugulnik(n+1,m);
    	chisla(n);cout<<endl;
    }
    int main()  {
    
    triugulnik(1,5);
      
        return 0;
    }
  28. bobby666666 каза:
     #include <cstdlib>
    #include <iostream>
     //Да се напише програма, която чрез рекурсивни функции,
     // отпечатва триъгълник от числата от 1 до N. Например при N=3:
    
    
    void chislo(int n, int x){
        if (n==0) return;
        cout<<x;
        chislo(n-1,x+1);
      
    }
     
     void triugulnik(int n ,int x, int m){
        if (n>m) return;
        chislo(n,x);cout<<endl; //поставяме нов ред след всяко извеждане 
        triugulnik(n+1,x,m);
        chislo(n,x);cout<<endl;
    }
         
        int main(int argc, char** argv) {
        triugulnik(1,1,6);
     
        return 0;
    } 
  29. MartinPlamenov каза:
    #include<iostream>
    using namespace std;
     //4A Да се напише рекурсивна функция, която установява, дали в записа на естественото число n се съдържа цифрата k
    bool proverka(int n,int k){
    	if(n%10==k){
    		return true;	
    	}
    	if (n==0){
    		return false;
    	}
    	if (k==n){
    		return true;
    	}
    	return proverka(n/10,k);
    }
    int main()  {
    
    	if(proverka(23512,3)){
    		cout<<"Sudurja se";	
    	} else {
    		cout<<"Ne se sudurja";	
    	} 
    
      
        return 0;
    }
    
  30. bobby666666 каза:
    #include <cstdlib>
    #include <iostream>
     
     //Да се напише рекурсивна функция, която установява, дали в записа на естественото число n се съдържа цифрата k
     using namespace std;
     
    bool cifraVchislo(int n, int k){
    
    if (n==k) return true;
        if (n==0) return false;
      if(n%10,k) return true;
      
      return cifraVchislo(n/10,k)
      
    }
     
         
        int main(int argc, char** argv) {
        if(cifraVchislo(123,11)){
        	cout<<"da";
        }else
        cout<<"ne";
     
        return 0;
    }
     
  31. MartinPlamenov каза:
    #include<iostream>
    using namespace std;
     //Да се напише програма, която извежда произволно число, разложено на прости множители. Например за 24 трябва да изведе 2 2 2 3
    void razlagane(int n,int k)
    {		
    if (n==0) return;
    while(n%k!=0){
    	k++;
    }
    	cout<<k<<" ";		
    	razlagane(n/k,k);	
    		
    }
    
    
    int main()  {
    cout<<"Razlojeno na prosti mnojiteli chisloto e:"<<endl;
    razlagane(35,2);
      
        return 0;
    }
  32. Alexander1 каза:
    #include <iostream>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    //4d
    int Suma(int n, int k)
    {
    	if(n==k)
    	{
    	cout<<k;
    	return k;
    	}	
    	cout<<n<<"+";
    	return n+Suma(n+1,k);
    }
    //4e
    int N(int n, int k){
        if(n==k)
    	{
    	cout<<k;
    	return k;
    	} 
    	cout<<n<<"*";
        return n*N(n+1,k); 
    }
    int main(int argc, char** argv) {
    	int k;
    	cin>>k;
    	cout<<"="<<Suma(1,k)<<endl;
    	cout<<"="<<N(1,k)<<"="<<"!"<<k<<endl;
    	return 0;
    }
  33. MartinPlamenov каза:
    #include<iostream>
    using namespace std;
     //Да се напише програма, която чрез рекурсивни функции отпечатва на екрана N! Например при N=5 трябва да изведе 5!=120=1*2*3*4*5
    /*Имаме две променливи тъй като еднато ще използваме да умножаваме числото със следващото по-ниско от него а другата стойност показва от колко ще започне
    това умножения*/
    void proizvedenie(int nachalo,int n){
    	
    	if (n==0)
    	{
    		//Изразява финалния резултат
    		cout<<"Obshtoto proizvedenie e:"<<nachalo; 
    		return;	
    	} 
    	//Показва всяко число по еденично
    	nachalo*=n;
    	cout<<n<<"* ";
    	proizvedenie(nachalo,n-1);
    	
    }
    
    int main()  {
    proizvedenie(1,5);
        return 0;
    }

Вашият коментар