输入范围内的递归函数
Recursion Function over a Range of Inputs
在这里学习C++的新手。我目前正在练习通过使用 for 循环在一系列输入之间调用递归函数的概念,并将 运行 转换为“分段错误:11”错误。
尝试的代码和我面临的错误发布在下面。现在我知道这个错误很可能是我对递归概念不满意的结果,所以任何见解都会有很大帮助! (注:这不是作业,只是一道我想更好理解的挑战题。)
这是我尝试对其应用递归的数学函数及其基本情况及其要测试的输入范围。
g(2x)= 2g(x)/ 1+g^2(x)
x在-1<=x<=1之间;
x在-1<=x<=1之间;
x 递增 0.1
基础条件:
公差=10^-6
if (|x| < tolerance) return g(x)= x- x^3/6
尝试的代码
//Libraries
#include <iostream>
#include <cmath>
using namespace std;
//Function Prototypes
float recFunc(float);
int main(int argc, char** argv) {
//Call Recursive Function and Output Results
//from negative 1 to z
for (float x=-1.0; x<=0; x+=0.1f){
cout<<"X Value = "<<x<<" : g(2x) = "<<recFunc(x)<<endl;
}
//from 0 to 1
for (float x=0; x<1.1; x+=0.1f){
cout<<"X Value = "<<x<<" : g(2x) = "<<recFunc(x)<<endl;
}
return 0;
}
float recFunc(float x){
//Base condition
float tol= 1e-6f;
if(abs(x)< tol) return x-x*x*x/6;
//Recursive Call
float val= 2*(x-x*x*x/6)/1+(x-x*x*x/6)*(x-x*x*x/6);
return 2*recFunc(val);
}
贴出来的数学公式基本上就是
g(2 * x) = F(g(x))
可以改写为
g(x) = F(g( x / 2 ))
因此,要修复 recFunc
,您必须:
在 x/2
处评估 g
。这是对 recFunc
的递归调用,但使用 x / 2
作为参数。将返回值赋值给变量,如val
.
ReturnF(val)
。意思是,将发布的公式应用于前一点计算的值。
这是递归浮点函数中上述错误的更正代码。
float recFunc(float x){
//Base condition
float tol= 1e-6f;
if(abs(x)< tol) return x-x*x*x/6;
//Recursive Call
float val= recFunc(x/2);
return 2*val/1+val*val;
}
在这里学习C++的新手。我目前正在练习通过使用 for 循环在一系列输入之间调用递归函数的概念,并将 运行 转换为“分段错误:11”错误。
尝试的代码和我面临的错误发布在下面。现在我知道这个错误很可能是我对递归概念不满意的结果,所以任何见解都会有很大帮助! (注:这不是作业,只是一道我想更好理解的挑战题。)
这是我尝试对其应用递归的数学函数及其基本情况及其要测试的输入范围。
g(2x)= 2g(x)/ 1+g^2(x)
x在-1<=x<=1之间;
x在-1<=x<=1之间;
x 递增 0.1
基础条件:
公差=10^-6
if (|x| < tolerance) return g(x)= x- x^3/6
尝试的代码
//Libraries
#include <iostream>
#include <cmath>
using namespace std;
//Function Prototypes
float recFunc(float);
int main(int argc, char** argv) {
//Call Recursive Function and Output Results
//from negative 1 to z
for (float x=-1.0; x<=0; x+=0.1f){
cout<<"X Value = "<<x<<" : g(2x) = "<<recFunc(x)<<endl;
}
//from 0 to 1
for (float x=0; x<1.1; x+=0.1f){
cout<<"X Value = "<<x<<" : g(2x) = "<<recFunc(x)<<endl;
}
return 0;
}
float recFunc(float x){
//Base condition
float tol= 1e-6f;
if(abs(x)< tol) return x-x*x*x/6;
//Recursive Call
float val= 2*(x-x*x*x/6)/1+(x-x*x*x/6)*(x-x*x*x/6);
return 2*recFunc(val);
}
贴出来的数学公式基本上就是
g(2 * x) = F(g(x))
可以改写为
g(x) = F(g( x / 2 ))
因此,要修复 recFunc
,您必须:
在
x/2
处评估g
。这是对recFunc
的递归调用,但使用x / 2
作为参数。将返回值赋值给变量,如val
.Return
F(val)
。意思是,将发布的公式应用于前一点计算的值。
这是递归浮点函数中上述错误的更正代码。
float recFunc(float x){
//Base condition
float tol= 1e-6f;
if(abs(x)< tol) return x-x*x*x/6;
//Recursive Call
float val= recFunc(x/2);
return 2*val/1+val*val;
}