• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomógłby ktoś z takim zadaniem z rekurencji? Naprawdę już nie mam pomysłu..

Object Storage Arubacloud
0 głosów
294 wizyt
pytanie zadane 12 grudnia 2018 w C i C++ przez Patrycja Migowska Nowicjusz (120 p.)

Pewien algorytm rekurencyjny działa w następujący sposób: - wstaw literę a - w kolejnych krokach przestaw litery pierwszą z ostatnią i dopisz na końcu kolejną literę alfabetu - w przypadku wyczerpania liter alfabetu (małe litery) rozpocznij od początku alfabetu. Rozwiązanie dla podanego n zapisz w pliku alfabet.txt.

 

Przykładowe rozwiązania: 

n  
0 a
1 ab
2 bac
3 cabd
4 dabce

2 odpowiedzi

0 głosów
odpowiedź 12 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
edycja 12 grudnia 2018 przez monika90

Drobiazg...

#include <iostream>
#include <utility>
#include <string>

void f(int n, std::string& s)
{
    if (n > 0)
    {
        std::swap(s.front(), s.back());
        s.push_back(s.front() < 'z' ? s.front() + 1 : 'a');
        f(n - 1, s);
    }
}

std::string f(int n)
{
    std::string s = "a";
    f(n, s);
    return s;
}

int main()
{
    std::cout << f(4) << '\n';
}

To rozwiązanie zakłada, że litery w zestawie znaków są po kolei i bez żadnych przerw, co nie zawsze jest prawdą.

0 głosów
odpowiedź 12 grudnia 2018 przez X3h Dyskutant (9,540 p.)
rekurencja.cpp

//https://forum.pasja-informatyki.pl/399943/pomoglby-ktos-z-takim-zadaniem-z-rekurencji-naprawde-juz-nie-mam-pomyslu

#include <iostream>
#include <vector>
#include <cstdlib>
#include <stdio.h>
using namespace std;

void generate(vector<char> *v, int alphabetIndex, int reqiredLength){
	
	for(vector<char>::const_iterator i = v->begin(); i != v->end(); ++i){
		printf("%c", *i);
	}
	printf("\n");
	
	if(alphabetIndex + 'a' > 'z'){
		alphabetIndex = 0;
	}
	
	char tmp = v->at(0);
	v->at(0) =v->at(v->size()-1);
	v->at(v->size()-1) = tmp;
	
	v->push_back(alphabetIndex + 'a');
	
	if(v->size() < reqiredLength){
		generate(v, alphabetIndex+1, reqiredLength);
	}
	
}

int main(int argc, char *argv[]){
	
	int reqiredLength = atoi(argv[1]);
	
	if(reqiredLength <= 0){
		printf("Podaj liczbę naturalną dodatnią.");
		return 0;
	}

	vector<char> *v = new vector<char>();
	v->push_back('a');
	generate(v, 1, reqiredLength);
	
	return 0;
	
}

kompilacja: g++ rekurencja.cpp -o rekurencja

przykładowe wykonanie: ./rekurencja 10 > wynik

Podobne pytania

0 głosów
0 odpowiedzi 122 wizyt
0 głosów
1 odpowiedź 361 wizyt
0 głosów
2 odpowiedzi 1,014 wizyt
pytanie zadane 26 listopada 2020 w Python przez Julia Dłutek Nowicjusz (170 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...