there is a exponential program, it has some problem in result {if x=1 and n=5 the answer must be 2.7016} pls tell me the problem and solution also Code: #include<stdio.h> #include<conio.h> float expo(float,float,int,float); float term(float,float,float); main() { int n; float e=0.0,t=1.0,x; static float s=1.0; clrscr(); printf("\nenter variable & no ofterms:="); scanf("%f%d",&x,&n); e=expo(x,t,n,s); printf("\nsum=%f",e); getch(); return; } float expo(float x,float t,int n,float s) { float c=1.0,e=0; if(t<n) { e=term(x,t,c); s=s+e; expo(x,t+1.0,n,s); } return(s); } float term(float x,float t,float c) { if(t>=1) { c=c*(x/t); term(x,t-1,c); } return(c); }
check the result again.i think it must be 2.7083 i made 2 corrections and also i changed how scanf gets its data. Code: #include<stdio.h> #include<conio.h> float expo(float,float,int,float); float term(float,float,float); int main() { int n; float e=0.0,t=1.0,x; static float s=1.0; //clrscr(); [COLOR="Red"]printf("\nenter variable:"); scanf("%f",&x); printf("\nenter no of terms:"); scanf("%d",&n);[/COLOR] e=expo(x,t,n,s); printf("\nsum=%f",e); getch(); return 0; } float expo(float x,float t,int n,float s){ float c=1.0,e=0; if(t<n){ e=term(x,t,c); s=s+e; t++; [COLOR=Red]s=expo(x,t,n,s);[/COLOR] } return(s); } float term(float x,float t,float c) { if(t>=1){ c=c*(x/t); [COLOR=Red]c=term(x,t-1,c);[/COLOR] } return(c); }
thanks virxen, i m very happy to get sol.,pls tell me whats the actual problem in prog at (vipul.fifteen@yahoo.com) once again thanks
a better solution is this Code: #include<stdio.h> #include<conio.h> float expo(float,float,int,float); float term(float,float,float); int main() { int n; float e=0.0,t=1.0,x; static float s=1.0; //clrscr(); printf("\nenter variable:"); scanf("%f",&x); printf("\nenter no of terms:"); scanf("%d",&n); e=expo(x,t,n,s); printf("\nsum=%f",e); getch(); return 0; } float expo(float x,float t,int n,float s){ float c=1.0,e=0; if(t<n){ e=term(x,t,c); s=s+e; t++; [COLOR=Red]return expo(x,t,n,s);[/COLOR] } return(s); } float term(float x,float t,float c) { if(t>=1){ c=c*(x/t); [COLOR=Red]return term(x,t-1,c);[/COLOR] } return(c); } the error is that when you have a recursive function like above you must keep a sequential line between its calls and not to break it. for instance(each one calls its previous ) 4!=3!*4=(2!*3)*4=( (1!*1*2)*3 )*4=((0!*1*2)*3)*4 without the return i added here you always return c as the result which is not changing. for more on this check this link http://www.java2s.com/Tutorial/C/0160__Function/Recursion.htm