Рекурсия за масиви

Да се напишат рекурсивни функции, които за даден едномерен масив а от n цели числа намират:

  1. сумата на елементите
  2. броят на ненулевите елементи
  3. най-малкият елемент
  4. извеждат елементите на масива на екрана
  5. извеждат елементите на масива в обратен ред
  6. въвеждат елементите на масива от клавиатурата
Публикувано в 12в с етикети . Постоянна връзка.

2 Responses to Рекурсия за масиви

  1. kaloyan каза:

    Не съм сигурен дали това е най-правилния начин за намиране на най-малкият елемент

    #include <cstdlib>
    #include <iostream>
      
    using namespace std;
    
    // 1. сумата на елементите
    int suma(int a[], int n){
    	if(n>=0) return a[n]+suma(a, n-1);
    	else return 0;
    }
    
    // 2. броят на ненулевите елементи
    int nenulevi(int a[], int n, int br){
    	if(n>=0){
    		if(a[n]!=0) return nenulevi(a, n-1, br+1);
    		else return nenulevi(a, n-1, br);
    	} else return br;
    }
    
    // 3. най-малкият елемент
    int minim(int a[], int n, int min){
    	if(n>=0){
    		if(a[n]<min) return minim(a, n-1, a[n]);
    		else return minim(a, n-1, min);
    	} else return min;
    }
    
    // 4. извеждане на елементите на масива на екрана
    void print(int a[], int n){
    	if(n>=0){
    		print(a, n-1);
    		cout<<a[n]<<" ";
    	}
    }
    
    // 5. извеждане на елементите на масива в обратен ред
    void print_obr(int a[], int n){
    	if(n>=0){
    		cout<<a[n]<<" ";
    		print_obr(a, n-1);
    	}
    }
    
    // 6. въвеждане на елементите на масива от клавиатурата
    void vavedi(int a[], int n){
    	if(n>=0){
    		vavedi(a,n-1);
    		cin>>a[n];
    	}
    }
    
    int main(int argc, char** argv) {
    	int n;
    	cout<<"Broi chisla: ";
    	cin>>n;
    	int a[n];
    	
    	cout<<"Vavedi chislata:"<<endl;
    	vavedi(a, n-1);
    	cout<<endl;
    	
    	cout<<"Suma: "<<suma(a, n-1)<<endl;
    	
    	//Последния параметър(0) - броя на ненулевите
    	cout<<"Nenulevi: "<<nenulevi(a, n-1, 0)<<endl;
    	
    	//a[n-1] - число от масива, с което ще сравняваме другите
    	cout<<"Nai-malko: "<<minim(a, n-1, a[n-1])<<endl;
    	
    	cout<<"Vavedenite chisla: ";
    	print(a, n-1);
    	cout<<endl;
    	
    	cout<<"Vavedenite chisla v obraten red: ";
    	print_obr(a, n-1);
    	cout<<endl;
    	
    	return 0;
    }
    • Данаил каза:

      Браво, добре си разбрал рекурсията! За минималния елемент – ами да, това е – сравняваш текущия елемент с остатъка от опашката. Има и други начини, ще ти ги покажа в часа. Първите три функции могат малко да се оптимизират, като се вземе в предвид какво ще се случи близо до дъното на рекурсията. Така ще се спести някое и друго рекурсивно извикване. Функцията за брой на ненулевите елементи може да се опрости като се използва преобразуването между типовете.

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