14.03.2015 Views

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!