int fatorial(int num){
if(num == 0) // linha 1
return 1; // linha 2
return num*fatorial(num -1); // linha 3
}
A função fatorial mostra um exemplo de recursividade, para quem precise do conceito de recursividade:
A recursividade pode ser vista como funções que chamam a si mesmas. Assim um algoritmo é recursivo se a função que descreve o algoritmo chama a si própria, em algum local dessa função.
Na minha opinião, esse código estaria faltando-lhe um "else" entre as linhas 2 e 3, no entanto este procedimento (a não definição de intruções delimitativas para esta estrutura de decisão) é as vezes usual e é ainda válida, pois funciona. Essa função corresponderia na linguagem XBase:
? fatorial(0)
? fatorial(2)
function fatorial(num)
if (num == 0)
return 1
endif
return num*fatorial2(num -1)
Eu questionei aos meus professores e ainda confesso que resta um pouco de dúvida. Não quanto a lógica do algoritmo sim da sintaxe utilizada. Pois acho que na maioria, por não dizer todos, que programam em Clipper não iriam deixar de mencionar o else ou até mesmo a inserção de delimitadores "{ }" para definir a estrutura. É dizer, muito de nós que programamos em Clipper preferimos a forma canônica na elaboração de algoritimo.
Eu cheguei a concluir mesmo que contrariando em tese o seguinte conceito:
3.2 Estrutura de decisão simples (if)
Na Seleção Simples, uma instrução ou um conjunto de instruções é executado somente se o teste condicional especificado retornar o valor verdadeiro. Caso o resultado do teste seja falso, nenhuma das instruções delimitadas pela estrutura de seleção será executada e a execução das instruções será desviada para a instrução imediatamente seguinte à estrutura de seleção.
Minha resolução: Pelo que eu comprovei é que após a formulação da condição simples, é executado as linhas logo após até o return 1; como parte do 1º bloco, logo o segundo bloco é considerado apartir da segunda linha após a definição da condição, de forma impreterÃvel e continua a execução do resto até o próximo return.
Se alguém quiser comentar a respeito, por favor sinta-se a vontade eu ainda me sinto um tanto surpreso.