WolfmanZ Posted October 2, 2013 at 12:48 PM Report #527197 Posted October 2, 2013 at 12:48 PM Boa tarde pessoal tenho um problema num exercicio de recursividade onde é preciso calcular o resultado do somatorio(de k=0 ate n) desta formula : ((n!) / (k!)*(n-k)! ) * B(k) sendo B(k) a funçao a ser chamada de forma recursiva. o meu problema é calcular o numero de Bell so que o numero de bell (3) é 5 e a mim da-me 7. int nBell(int n, int soma){ n=n-1; int k; if(n==0) return 1; else{ for (k=0;k<=n;k++){ soma = soma+( (fact(n)/(fact(k)*fact(n-k) )) * nBell(k,soma) ); } } return soma; }
HappyHippyHippo Posted October 2, 2013 at 01:42 PM Report #527210 Posted October 2, 2013 at 01:42 PM (edited) dou-te uma dica, o protótipo da função nBell é: int nBell(int n) { // ... calculate ... } Edited October 2, 2013 at 01:42 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
WolfmanZ Posted October 2, 2013 at 03:54 PM Author Report #527247 Posted October 2, 2013 at 03:54 PM (edited) dou-te uma dica, o protótipo da função nBell é: int nBell(int n) { // ... calculate ... } Entao como faço o somatório com uma varialvel dentro da funçao nBell? é que se tirar o soma da função e fizer return vai dar 1. return( ( (fact(n)/(fact(k)*fact(n-k) )) * nBell(k) ) ); Edited October 2, 2013 at 03:56 PM by WolfmanZ
thoga31 Posted October 2, 2013 at 03:57 PM Report #527251 Posted October 2, 2013 at 03:57 PM Estás a pensar dessa forma porque não entendeste o conceito de recursividade. Vê este exemplo: long factorial(int n) { return n<0 ? 0 : n<=1 ? 1 : n * factorial(n-1); } Knowledge is free!
WolfmanZ Posted October 2, 2013 at 04:02 PM Author Report #527255 Posted October 2, 2013 at 04:02 PM (edited) Estás a pensar dessa forma porque não entendeste o conceito de recursividade. Vê este exemplo: long factorial(int n) { return n<0 ? 0 : n<=1 ? 1 : n * factorial(n-1); } eu tenho a funçao factorial implementada no programa porque preciso dela . int fact(int x){ if (x>1) return x*fact(x-1); else return 1; } Edited October 2, 2013 at 04:07 PM by WolfmanZ
HappyHippyHippo Posted October 2, 2013 at 04:21 PM Report #527266 Posted October 2, 2013 at 04:21 PM (edited) Entao como faço o somatório com uma varialvel dentro da funçao nBell? é que se tirar o soma da função e fizer return vai dar 1. return( ( (fact(n)/(fact(k)*fact(n-k) )) * nBell(k) ) ); pois vai, porque o que escreveste não tem o somatório ... ..... teaser ...... happyhippyhippo@hhh-dev ~/Coding/c $ ./test nBell 0 : 1 nBell 1 : 1 nBell 2 : 2 nBell 3 : 5 nBell 4 : 15 nBell 5 : 52 nBell 6 : 203 nBell 7 : 877 nBell 8 : 4140 nBell 9 : 21147 Edited October 2, 2013 at 04:23 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
WolfmanZ Posted October 2, 2013 at 04:35 PM Author Report #527278 Posted October 2, 2013 at 04:35 PM pois vai, porque o que escreveste não tem o somatório ... ..... teaser ...... happyhippyhippo@hhh-dev ~/Coding/c $ ./test nBell 0 : 1 nBell 1 : 1 nBell 2 : 2 nBell 3 : 5 nBell 4 : 15 nBell 5 : 52 nBell 6 : 203 nBell 7 : 877 nBell 8 : 4140 nBell 9 : 21147 ando longe do codigo final? ou é so a parte do somatorio que ta mal?
HappyHippyHippo Posted October 2, 2013 at 04:47 PM Report #527287 Posted October 2, 2013 at 04:47 PM o que te parece ? compara a fórmula com o código : a transposição é directa IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
WolfmanZ Posted October 2, 2013 at 05:01 PM Author Report #527290 Posted October 2, 2013 at 05:01 PM (edited) o que te parece ? compara a fórmula com o código : a transposição é directa entao o meu problema é nesta formula? pensava que a forma tivesse bem. soma = soma+( (fact(n)/(fact(k)*fact(n-k) )) * nBell(k) ); Edited October 2, 2013 at 05:04 PM by WolfmanZ
HappyHippyHippo Posted October 2, 2013 at 05:05 PM Report #527291 Posted October 2, 2013 at 05:05 PM um programa não se resume a uma linha, se não colocares todo o teu código que tens neste momento, ninguém te vai poder ajudar IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
WolfmanZ Posted October 2, 2013 at 05:23 PM Author Report #527292 Posted October 2, 2013 at 05:23 PM um programa não se resume a uma linha, se não colocares todo o teu código que tens neste momento, ninguém te vai poder ajudar Obrigado pela ajuda ja consegui muito obrigado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now