#include <iostream> #include <cstring> #define MAX_SIZE 30 using namespace std; void swaps(char *napisy[], int x, int y) { char cos[MAX_SIZE]; strcpy(cos, napisy[x]); strcpy(napisy[x], napisy[y]); strcpy(napisy[y], cos); } void rekurencja(char *T[],int rozmiar) { static int i=0; swaps(T, i, rozmiar-1); if(i<rozmiar-1) { i++; rekurencja(T, rozmiar-1); } } int main() { char Ala[MAX_SIZE]= {"Ala"}; char ma[MAX_SIZE]= {"ma"}; char kota[MAX_SIZE]= {"kota"}; char i[MAX_SIZE]= {"i"}; char psa[MAX_SIZE]= {"psa"}; char *T[] = {Ala, ma, kota, i, psa}; rekurencja(T,5); return 0; }
funkcja rekurencja, ma zamieniać słowa za pomocą funkcji swaps, ale ma robić to rekurencyjnie, czy moja funkcja jest rekurencyja?
Jak mogę zmodyfikować tą funkcję, by "wywalić" static int i=0;?
Jeśli wpiszę cout<<T; to wynikiem będzie adres 1 elementu tablicy w której przechowywane jest 5 wskazników na tablice typu char tak? więc T+1 będzie adresem drugiego wskaźnika?
Czy tę wiedzę mogę wykorzystać w swojej funkcji "rekurencja" przesuwając wskaźnik o 1 za pomoc T+1? tzn przy wywolaniu rekurencyjnym rekurencja(T+1, rozmiar-1) moją intencją byłoby przesuniecie wskaźnika na 2 tablice charow i zmniejszeniu tablicy wskaznikow o 1. Niestety tutaj mój program się wywraca i nie do końca wiem jak to naprawic.
Liczę na Waszą pomoc.