Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: ubuntu 8.10..:P
Por removido
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Listeiro 037 em (última atualização em 14/06/2012)   [ 1663 hits ]

Login: Listeiro 037, 189845 pontos

Download:


Descrição

De quantos modos diferentes pode-se escrever 6 como soma de números maiores que zero?

6 = 5+1 = 4+2 = 3+3 = 4+1+1 = 3+2+1 = 2+2+2 = 3+1+1+1 = 2+2+1+1 = 2+1+1+1+1 = 1+1+1+1+1+1

11 modos diferentes. p(6) = 11.

O cálculo do número de partições de um inteiro usa uma recursão bem mais demorada que a dos números de Fibonacci ou a fatorial.

Este exemplo usa a recursão pura e simples sem armazenar os valores já calculados, necessitando de um novo cálculo a cada chamada.

Isto porque pelo método de recursão, ela pode ter a necessidade de calcular valores anteriormente calculados.

Quanto maior o valor requerido, maior o tempo.

Quem não tiver saco de esperar a eternidade de cálculo para os valores deste código, sugiro modificar para um tempo que não seja tão cansativa a demora.

Parte dos resultados pode ser conferida neste link: http://oeis.org/A000041


[ Download: part001.c ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#include <stdio.h>

unsigned int part (unsigned int n) {

   if (n<0) return 0;
   if (n==0) return 1;
   if (n<=3) return n;

   unsigned int i=0, j=0, p=0;
   unsigned int k, s;

   for (k=1,s=1;i<n||j<n;k++,s=-s) {

      i = (3*k*k-k)/2;
      j = (3*k*k+k)/2;

      p += (i<=n)?(s*part(n-i)):0;
      p += (j<=n)?(s*part(n-j)):0;

   }

   return p;

}

int main (void) {

   printf ("particao de %3u = %15u\n", 30, part(30));
   printf ("particao de %3u = %15u\n", 60, part(60));
   printf ("particao de %3u = %15u\n", 45, part(45));
   printf ("particao de %3u = %15u\n", 90, part(90));
   printf ("particao de %3u = %15u\n", 120, part(120));
   printf ("particao de %3u = %15u\n", 105, part(105));

   return 0;

}



Scripts recomendados
   Script Linux recomendado Arvores Red Black
   Script Linux recomendado Aplicção em C++
   Script Linux recomendado Stack (LIFO)
   Script Linux recomendado Biblioteca dos.h
   Script Linux recomendado Biblioteca de tipos abstratos

Comentários



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.