-
January 29th, 2010, 07:35 PM
#1
Recursion Help
I cant get this function to recursively call itself what do i have in wrong i go through debugger and it just slides right over the recursive call
double recursive (double left, double permaRight,double permaTol, double right, double tol)
{
double leftArea, rightArea, fullArea, areaAB, finalArea=0, recursiveAreaDifference=0, midpointer;
leftArea = funcArea(F(left), F(midpoint(left,right)), midpoint(left,right),left);
rightArea = funcArea(F(right), F(midpoint(left,right)), midpoint(left,right),right);
fullArea = funcArea(F(left),F(right),(midpoint(left,right)*2),0);
areaAB = (leftArea +rightArea);
midpointer = midpoint(left,right);
finalArea += areaAB;
if(left == permaRight)//if the changing left bound = the user defined right limit
{
return finalArea; //progressive addition of the area
}
if((areaAB) <= ((fullArea + tol)||(fullArea -tol)))
{
permaTol -( fabs(areaAB - fullArea));
recursiveAreaDifference += fabs((areaAB - fullArea));
left = right;
right = permaRight;
return (recursive(left,permaRight,permaTol, right, tol));
}
else
{
return recursive(left,permaRight, permaTol, midpoint(left,right), tol/2);
}
-
January 29th, 2010, 07:36 PM
#2
Full Program
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
double F(double x);
//PRE: none.
//POST: returns F(x).
double midpoint(double a, double b, int c=1);
double funcArea(double a, double b, double midpoint, double limit);
double recursive(double left, double permaRight,double permaTol, double right, double tol);
int main()
{
ofstream fout;//opens output file
fout.open("Output.txt");//designates output file
if(fout.fail())
{
cerr << "output file failed to open" <<endl;
}
///this section just deals with user input of variables to be manipulated
double left = 0, right = 0, usertol, tol = 0, permaRight =0;
cout << "Please enter left lateral limit." << endl;
//cin >> left;
left = 0; //testing conditions
fout << "Left limit is " << left << endl;
cout << "Left limit is " << left << endl;
cout << "Please enter right lateral limit." <<endl;
//cin >> right;
right = 4; ///testing conditions
permaRight = right;// will keep the right limit stored for the recursive function to check against
fout << "Right limit is " << right << endl;
cout << "Right limit is " << right << endl;
cout << "Please enter area accuracy tolerance." <<endl;
//cin >> usertol;
usertol = .1;
tol = usertol/2; ///testing conditions
fout << "Tolerance within " << tol <<endl;
cout << "Tolerance within " << tol <<endl;
double leftArea =0, rightArea=0, fullArea=0, areaAB=0;
leftArea = funcArea(F(left), F(midpoint(left,right)), midpoint(left,right),left);
rightArea = funcArea(F(right), F(midpoint(left,right)), midpoint(left,right),right);
fullArea = funcArea(F(left),F(right),(midpoint(left,right)*2),0);
fout << "Midpoint " << midpoint(left,right)<<endl;
fout << "F(left) "<< F(left)<<endl;
fout << "F(midpoint) "<< F(midpoint(left,right))<<endl;
fout << "F(right) "<< F(right)<<endl;
fout << "Area of left " << leftArea << endl;
fout << "Area of right " << rightArea <<endl;
fout << "Full area" << fullArea <<endl;
fout << "Area estimation" << recursive(left,permaRight,tol ,right,tol)<<endl;
fout.close();
return 0;
}
double F(double x)
{
double z;
z = pow(x,3)+2;
return z;
}
double midpoint(double a, double b, int c)
{
double z;
z=(a+b)/(pow((double)2,c));
return(z);
}
double funcArea(double a, double b, double midpoint, double limit)
{
double z;
z =((a+b)/2)*(fabs(midpoint - limit)); // a = f(right or left limit) b= f(midpoint)
//fabs = absolute value of the midpoint
//limit could be left or right the absolute value function will allow it to work with either
return z;
}
double recursive(double left, double permaRight,double permaTol, double right, double tol)
{
double leftArea, rightArea, fullArea, areaAB, finalArea=0, recursiveAreaDifference=0, midpointer;
leftArea = funcArea(F(left), F(midpoint(left,right)), midpoint(left,right),left);
rightArea = funcArea(F(right), F(midpoint(left,right)), midpoint(left,right),right);
fullArea = funcArea(F(left),F(right),(midpoint(left,right)*2),0);
areaAB = (leftArea +rightArea);
midpointer = midpoint(left,right);
finalArea += areaAB;
if(left == permaRight)//if the changing left bound = the user defined right limit
{
return finalArea; //progressive addition of the area
}
if((areaAB) <= ((fullArea + tol)||(fullArea -tol)))
{
permaTol -( fabs(areaAB - fullArea));
recursiveAreaDifference += fabs((areaAB - fullArea));
left = right;
right = permaRight;
return (recursive(left,permaRight,permaTol, right, tol));
}
else
{
return (recursive(left,permaRight, permaTol, (midpoint(left,right)), (tol/2)));
}
}
-
January 29th, 2010, 07:56 PM
#3
Re: Recursion Help
it executes but horribly need some help if possible
-
January 30th, 2010, 05:20 AM
#4
Re: Recursion Help
Easy please
Put them in code tags then errors will be probably found easier
Sig-na-tju-(r)
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|