Buscar

Aula19 Recursividade

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação	
  para	
  Servidores	
  
Aula	
  19	
  
Sumário	
  
•  Revisão	
  de	
  funções;	
  
•  Recursividade.	
  
2	
  
Funções	
  
•  Argumentos	
  
– Funções	
  podem	
  receber	
  e	
  processar	
  argumentos	
  passados	
  
durante	
  sua	
  chamada.	
  Estes	
  argumentos	
  são	
  acessados	
  
através	
  das	
  variáveis	
  $1,	
  $2,	
  $3,	
  etc.	
  Exemplo:	
  
mostra_soma () { 
 if [ -z "$1" ]; then 
 a=0 
 else 
 a=$1 
 fi 
3	
  
 if [ -z "$2" ]; then 
 b=0 
 else 
 b=$2 
 fi 
 let soma=$a+$b; 
 echo "$a + $b = $soma" 
} 
Funções	
  
•  Argumentos	
  
– Funções	
  podem	
  receber	
  e	
  processar	
  argumentos	
  passados	
  
durante	
  sua	
  chamada.	
  Estes	
  argumentos	
  são	
  acessados	
  
através	
  das	
  variáveis	
  $1,	
  $2,	
  $3,	
  etc.	
  Exemplo:	
  
mostra_soma () { 
 if [ -z "$1" ]; then 
 a=0 
 else 
 a=$1 
 fi 
4	
  
 if [ -z "$2" ]; then 
 b=0 
 else 
 b=$2 
 fi 
 let soma=$a+$b; 
 echo "$a + $b = $soma" 
} 
OBS.:	
  As	
  funções	
  não	
  enxergam	
  
os	
  argumentos	
  passados	
  para	
  o	
  
script.	
  
Por	
  isso,	
  não	
  é	
  redundante	
  o	
  uso	
  
das	
  variáveis	
  $1,	
  $2,	
  etc.	
  
Funções	
  
•  Status	
  de	
  saída	
  (cont.)	
  
– O	
  status	
  de	
  saída	
  pode	
  ser	
  usado	
  como	
  retorno	
  da	
  função.	
  
– Exemplo:	
  
function teste() { 
 return $(( $1 + $2 )) 
} 
teste 3 4 
– Entretanto,	
  este	
  uso	
  tem	
  uma	
  restrição:	
  o	
  status	
  de	
  
retorno	
  tem	
  que	
  ser	
  um	
  número	
  entre	
  0	
  e	
  255;	
  
5	
  
Funções	
  
•  Variáveis	
  locais	
  
– Uma	
  variável	
  pode	
  ser	
  declarada	
  com	
  o	
  comando	
  local	
  
para	
  que	
  seu	
  escopo	
  fique	
  reduzido	
  à	
  função	
  na	
  qual	
  ela	
  
foi	
  definida.	
  Exemplos.	
  
#variavel global 
func () { 
 let soma=$1+$2 
 echo "$1 + $2 = $soma" 
} 
soma=8 
echo "$soma" # mostra 8 
func 2 3 # mostra 2 + 3 = 5 
echo "$soma" # mostra 5 
6	
  
#variavel local 
func () { 
local soma 
let soma=$1+$2 
echo "$1 + $2 = $soma" 
} 
soma=8 
echo "$soma" # mostra 8 
func 2 3 # mostra 2 + 3 = 5 
echo "$soma" # mostra 8 
Exercícios	
  –	
  Aula	
  18	
  
•  Escrever	
  scripts	
  que	
  implementam	
  e	
  testam	
  as	
  
seguintes	
  funções:	
  
1.  Uma	
  função	
  que	
  receba	
  2	
  números	
  e	
  retorne	
  como	
  
código	
  de	
  status	
  um	
  dos	
  seguintes	
  valores:	
  
•  0	
   se	
  os	
  números	
  forem	
  iguais;	
  
•  1	
   se	
  o	
  primeiro	
  for	
  menor	
  que	
  o	
  segundo;	
  
•  2	
   se	
  o	
  primeiro	
  for	
  maior	
  que	
  o	
  segundo..	
  
2.  Uma	
  função	
  que	
  receba	
  como	
  parâmetros	
  A	
  e	
  B	
  e	
  
calcule	
  AB.	
  
3.  Uma	
  função	
  que	
  receba	
  várias	
  palavras	
  e	
  imprima	
  
estas	
  palavras	
  em	
  ordem	
  alfabéYca.	
  
7	
  
Resposta	
  1	
  
function compara() { 
 if [ $1 -eq $2 ]; then 
 return 0 
 elif [ $1 -lt $2 ]; then 
 return 1 
 else 
 return 2 
 fi 
} 
compara $1 $2 
echo $? 
8	
  
Resposta	
  2	
  
function calcula() { 
 echo $(( $1 * $2 )) 
} 
calcula $1 $2 
9	
  
Resposta	
  3	
  
function ordena() { 
 while [ $# -gt 0 ]; do 
 echo $1 
 shift 
 done | sort 
} 
ordena $@ 
10	
  
Funções	
  
•  Recursividade	
  
–  A	
  programação	
  shell	
  script	
  permite	
  que	
  funções	
  realizem	
  
chamadas	
  recursivas,	
  porém	
  há	
  um	
  impacto	
  significaYvo	
  no	
  
desempenho	
  do	
  sistema;	
  
–  Uma	
  função	
  é	
  recursiva,	
  quando	
  faz	
  uma	
  chamada	
  a	
  si	
  mesma.	
  
Exemplo:	
  
function fatorial() { 
 if [ $1 -le 1 ]; then 
 return 1 
 else 
 fatorial $(($1 - 1)) 
 return $(( $1 * $? )) 
 fi 
} 
11	
  
fatorial $1 
echo $? 
Funções	
  
•  Recursividade	
  (cont.)	
  
–  A	
  função	
  anterior	
  calcula	
  corretamente	
  no	
  máximo	
  o	
  fatorial	
  de	
  
5	
  =	
  120.	
  Segue	
  abaixo	
  uma	
  função	
  fatorial	
  mais	
  robusta:	
  
function fatorial() { 
 if [ $1 -le 1 ]; then 
 echo 1 
 else 
 local tmp 
 tmp=`fatorial $(($1 - 1))` 
 echo $(( $1 * $tmp )) 
 fi 
} 
fatorial $1 
12	
  
Exercícios	
  
•  Escrever	
  scripts	
  que	
  implementam	
  e	
  testam	
  as	
  
seguintes	
  funções:	
  
1.  Uma	
  função	
  que	
  recebe	
  o	
  nome	
  de	
  um	
  arquivo	
  como	
  
parâmetro	
  e	
  imprime	
  seu	
  conteúdo	
  na	
  tela	
  com	
  as	
  linhas	
  
numeradas.	
  A	
  função	
  deve	
  testar	
  se	
  o	
  arquivo	
  existe	
  na	
  
pasta	
  corrente	
  e	
  se	
  o	
  usuário	
  tem	
  permissão	
  de	
  leitura,	
  
mostrando	
  mensagens	
  de	
  erro	
  adequadas	
  e	
  amigáveis;	
  
2.  Uma	
  função	
  que	
  receba	
  como	
  parâmetro	
  um	
  número	
  e	
  
imprima	
  a	
  sequência	
  de	
  Fibonacci	
  contendo	
  apenas	
  
números	
  menores	
  do	
  que	
  àquele	
  passado	
  como	
  
parâmetro.	
  Sequência	
  de	
  Fibonacci	
  =	
  0	
  1	
  1	
  2	
  3	
  5	
  8	
  13	
  …,	
  
onde	
  o	
  próximo	
  da	
  sequência	
  é	
  a	
  soma	
  dos	
  2	
  anteriores;	
  
13	
  
Exercícios	
  
•  Escrever	
  scripts	
  que	
  implementam	
  e	
  testam	
  as	
  
seguintes	
  funções	
  (conYnuação...):	
  
3.  Uma	
  função	
  recursiva	
  que	
  recebe	
  dois	
  números	
  inteiros	
  e	
  
posiYvos	
  A	
  e	
  B	
  como	
  parâmetros	
  e	
  retorna	
  o	
  produto	
  de	
  
A	
  por	
  B,	
  usando	
  no	
  cálculo	
  somente	
  operações	
  de	
  soma,	
  
ou	
  seja,	
  SEM	
  UTILIZAR	
  a	
  operação	
  de	
  mulYplicação;	
  
14

Outros materiais