我正在解决一个问题,我必须打印所有的斐波那契数字,以便:
yellowMarkerPoints
我想通过大于或等于a的最小斐波纳契数来启动它们,以使我的程序运行得更快。为此,我需要定义变量“n”,使得第n个Fibonacci数满足上述条件(最小值大于或等于a)。要定义这样的变量,我需要找到满足斐波那契(n)通用项方程的最小“n”。
我试图通过制作一个for循环来找到它,但它最终变得像我从第一个Fibonacci数开始检查一样慢。任何人对如何有效地定义它都有任何想法?
P.S。这是我尝试过的代码:
cv::Mat R;
cv::Rodrigues(rvec, R);
cv::Mat cTw(4,4,CV_64F);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cTw.at<double>(i,j) = R.at<double>(i,j);
}
cTw.at<double>(i,3) = tvec.at<double>(i);
}
for (size_t i = 0; i < yellowMarkerPoints.size(); i++) {
cv::Mat pts3D = (cv::Mat_<double>(4,1) << yellowMarkerPoints[i].x, yellowMarkerPoints[i].y, yellowMarkerPoints[i].z, 1);
cv::Mat pts3D_cam = cTw * pts3D ;
double dist_to_cam = sqrt( pts3D_cam.at<double>(0)*pts3D_cam.at<double>(0) + pts3D_cam.at<double>(1)*pts3D_cam.at<double>(1) + pts3D_cam.at<double>(2)*pts3D_cam.at<double>(2) );
}
答案 0 :(得分:0)
对于F(n)
n
斐波纳契数的from math import sqrt
phi = (sqrt(5) + 1) / 2 # the golden ratio
F(n) = round(phi**n / sqrt(5))
来说,最有用的公式可能是
n
因此,对于给定值a
,获取from math import sqrt, log, ceil
phi = (sqrt(5) + 1) / 2 # the golden ratio
n = ceil(log(a * sqrt(5), phi))
值的一个公式是
n-1
由于近似和舍入问题,您应该检查n
,n+1
和a
的值,以确保获得所需的值。如果经常这样做,则应预先定义保持黄金比率和平方根值为5的变量。如果float
的值太大而sub array_contains
{
my ($arr_ref, $search, $strict) = @_;
if ($strict) {
return (grep {$_ eq $search} @$arr_ref);
} else {
return grep {index($_, $search) != -1} @$arr_ref;
}
}
类型无法准确存储,那么您需要一个更复杂的例程来处理更大的数字。