Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
eturn n*fat(n-1)<br />
else return 1;<br />
}<br />
void main()<br />
{<br />
int n;<br />
printf("\n\nDigite um valor para n: ");<br />
scanf("%d", &n);<br />
printf("\nO fatorial de %d e' %d", n, fat(n));<br />
}<br />
Note que, enquanto n não for igual a 0, a função fat chama a si mesma, ca<strong>da</strong> vez com um valor menor. n=0 é critério<br />
de para<strong>da</strong> para esta função.<br />
Há certos algoritmos que são mais eficientes quan<strong>do</strong> feitos de maneira recursiva, mas a recursivi<strong>da</strong>de é algo a ser<br />
evita<strong>do</strong> sempre que possível, pois, se usa<strong>da</strong> incorretamente, tende a consumir muita memória e ser lenta. Lembre-se<br />
que memória é consumi<strong>da</strong> ca<strong>da</strong> vez que o computa<strong>do</strong>r faz uma chama<strong>da</strong> a uma função. Com funções recursivas a<br />
memória <strong>do</strong> computa<strong>do</strong>r pode se esgotar rapi<strong>da</strong>mente.<br />
7.11 - Outras Questões<br />
Uma função, como foi dito anteriormente, é um bloco de construção muito útil. No C as funções são flexíveis. A<br />
flexibili<strong>da</strong>de dá poder, mas exige cui<strong>da</strong><strong>do</strong>.<br />
Funções devem ser implementa<strong>da</strong>s, quan<strong>do</strong> possível, <strong>da</strong> maneira mais geral possível. Isto as torna mais fáceis de<br />
serem reutiliza<strong>da</strong>s e entendi<strong>da</strong>s. Evite, sempre que possível, funções que usem variáveis globais.<br />
Se houver uma rotina que deve ser o mais veloz possível, seria bom implementá-la sem nenhuma (ou com o mínimo<br />
de) chama<strong>da</strong>s a funções, porque uma chama<strong>da</strong> a uma função consome tempo e memória.<br />
Um outro ponto importante é que, como já sabemos um boca<strong>do</strong> a respeito de funções, quan<strong>do</strong> formos ensinar uma <strong>da</strong>s<br />
funções <strong>da</strong>s bibliotecas <strong>do</strong> C vamos mostrar, em primeiro lugar, o seu protótipo. Quem entendeu tu<strong>do</strong> que foi<br />
ensina<strong>do</strong> nesta parte sobre funções pode retirar inúmeras informações de um protótipo (tipo de retorno, nome <strong>da</strong><br />
função, tipo <strong>do</strong>s argumentos, passagem por valor ou passagem por referência).<br />
Sugiro que neste ponto, o leitor leia um arquivo-cabeçalho como, por exemplo o conio.h ou o string.h. É um bom<br />
treino. Estes arquivo podem ser encontra<strong>do</strong>s no diretório apropria<strong>do</strong> <strong>do</strong> compila<strong>do</strong>r que você estiver utilizan<strong>do</strong><br />
(geralmente o subdiretório include <strong>do</strong> diretório onde você instalou o compila<strong>do</strong>r). Consulte o manual <strong>do</strong> compila<strong>do</strong>r.<br />
7.12 - Auto-avaliação on-line: aula 7<br />
Respon<strong>da</strong> as perguntas abaixo, escolhen<strong>do</strong> a alternativa adequa<strong>da</strong> para ca<strong>da</strong> questão. Você pode atingir até a nota 100.<br />
Sen<strong>do</strong> que ca<strong>da</strong> questão certa vale 10 pontos.<br />
1- Qual a afirmativa ver<strong>da</strong>deira?<br />
a. Você pode retornar para um programa quantas variáveis de uma função desejar através <strong>do</strong><br />
coman<strong>do</strong> return<br />
b. Uma função só pode ter um coman<strong>do</strong> return<br />
c. Os protótipos de função servem para declarar as funções, isto é, indicar para o compila<strong>do</strong>r qual<br />
o seu nome, tipo de retorno e o número e tipos <strong>do</strong>s parâmetros<br />
d. Uma função não pode retornar um ponteiro<br />
e. Nenhuma <strong>da</strong>s opções anteriores<br />
2- : Qual <strong>da</strong>s seguintes razões não é uma razão váli<strong>da</strong> para o uso de funções em C?<br />
a. Funções usam menos memória <strong>do</strong> que se repetirmos o mesmo código várias vezes<br />
b. Funções ro<strong>da</strong>m mais rápi<strong>do</strong><br />
Funções fornecem um meio de esconder cálculos em uma "caixa preta" que pode ser usa<strong>da</strong><br />
c.<br />
sem a preocupação de detalhes internos de implementação<br />
d. Funções mantêm variáveis protegi<strong>da</strong>s <strong>da</strong>s outras partes <strong>do</strong> programa<br />
3- Qual a afirmativa falsa?<br />
Pág. 55