在這里學習 C 的新手。我目前正在練習通過使用 for 回圈在一系列輸入之間呼叫遞回函式的概念,并且遇到了“分段錯誤:11”錯誤。
嘗試的代碼和我面臨的錯誤發布在下面。現在我知道這個錯誤很可能是因為我對遞回的概念不滿意,所以任何見解都會有很大幫助!(注意:這不是作業,只是我想更好地理解的一個挑戰問題。)
這是我試圖將遞回應用于其基本情況及其要測驗的輸入范圍的數學函式。
g(2x)= 2g(x)/ 1 g^2(x)
x 介于 -1<= x <= 1 之間;
x 介于 -1<= x <= 1 之間;
x 遞增 0.1
基礎條件:
容差= 10^-6
如果 (|x| < 容差) 回傳 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);
}
uj5u.com熱心網友回復:
發布的數學公式基本上是
g(2 * x) = F(g(x))
可以改寫為
g(x) = F(g( x / 2 ))
因此,要修復recFunc,您必須:
g在評估x/2。這是對 的遞回呼叫recFunc,但帶有x / 2作為引數。將回傳值賦給變數,如val.回傳
F(val)。意思是,將發布的公式應用于上一點計算的值。
uj5u.com熱心網友回復:
這是遞回浮點函式中上述錯誤的更正代碼。
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344884.html
上一篇:應用記憶化使golom序列變慢
