Pulse 0 Denunciar post Postado Junho 10, 2015 Uma palavra de Fibonacci é definida por Aqui + denota a concatenação de duas strings. Esta sequência inicia com as seguintes palavras: b, a, ab, aba, abaab, abaababa, abaababaabaab, ... Faça uma função recursiva que receba um número N e retorne a N-ésima palavra de Fibonacci. Tentando fazer: #include <stdio.h> char f(char s[], int); int main () { char s[100], n=3; printf("%s", f(s, n)); } char f(char s[], int n) { if(n==0) { strcat("b", s); return "b"; } else if(n==1) { strcat("a", s); return "a"; } else { return f(n-1)f(s, n-2)); } } Não sei como fazer o resto... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 11, 2015 http://en.wikipedia.org/wiki/Fibonacci_word Pegando a ideia da wikipedia. Não fiz recursivo. #include <stdio.h> #include <stdlib.h> #include <string.h> char * palavra; void replace_all_b() { for(size_t i=0; i<strlen(palavra); i++) { if (palavra[i] == 'b') palavra[i] = '?'; } } unsigned int contar_a() { unsigned int contagem = 0; for(size_t i=0; i<strlen(palavra); i++) { if (palavra[i] == 'a') contagem++; } return contagem; } void replace_all_a() { unsigned int qtde_a = contar_a(); size_t novo_tamanho = strlen(palavra) + qtde_a + 1; // Cada letra 'a' gera duas letras, então somamos novamente a quantidade de 'a' na string. char * nova_palavra = malloc(novo_tamanho * sizeof(char)); for(size_t i=0,j=0; i<strlen(palavra); i++) { if (palavra[i] == 'a') { nova_palavra[j] = 'a'; nova_palavra[j+1] = 'b'; j+=2; } else { nova_palavra[j] = palavra[i]; j++; } } palavra = realloc(palavra, novo_tamanho * sizeof(char)); strncpy(palavra, nova_palavra, novo_tamanho-1); palavra[novo_tamanho-1] = '\0'; free(nova_palavra); nova_palavra = NULL; } void replace_all_question() { for(size_t i=0; i<strlen(palavra); i++) { if (palavra[i] == '?') palavra[i] = 'a'; } } void fib_word(unsigned int N) { /* 'a' vira 'ab'. 'b' é trocado por 'a' */ for(unsigned int i=0; i<N; i++) { replace_all_b(); replace_all_a(); replace_all_question(); } } int main(void) { unsigned int N; scanf("%u", &N); palavra = malloc(sizeof(char)*2); palavra[0] = 'b'; palavra[1] = '\0'; if (N) { fib_word(N); } printf("%s\n", palavra); free(palavra); return 0; } Só tem que tomar cuidado p/ não estourar o heap. A ideia principal está aí na forma iterativa. Você pode criar uma forma recursiva iniciando do i=0 até i<N (caso você comece de N não vai ser possível gerar a string dessa forma). Compartilhar este post Link para o post Compartilhar em outros sites