- 15颗糖,每次至少吃三个,问有多少张吃法?
证明递推公式: 。
证明:我们设定第一次吃x颗糖,x的取值范围为[3,n-3];
利用代换法,把下式带入上式,即可得出递推公式。
通项公式求解方法,可按照斐波那契数列的通项公式的求解方法求解。
递归代码实现:
int Count(int n)
{
if(n < 6)
return 1;
if(n == 6)
return 2;
if(n == 7)
return 3;
else
return Count(n-1) + Count(n-3);
}
运行截图:
- 牛顿下山法求数字的平方根
原理:如图所示,采用牛顿法迭代更新求取平方根,函数为
平方根更新公式为:
求解代码如下:
const float MINEPS = 10E-10; //全局变量,用于修正计算精度;
//函数返回值0,表示运行正确,返回值-1表示输入不合法,结果存储在res中;
bool sqrtNewton(double inNum, double &res)
{
if (abs(inNum - 0)<MINEPS)
{
res = 0;
return true;
}
else if (inNum<0)
{
return false;
}
else
{
double Xn1 = inNum/2; //初始化两个用于递推更新根
double Xn2 = (Xn1 + inNum/Xn1)/2;
while (abs(Xn2 - Xn1)>MINEPS)
{
Xn1 = Xn2;
Xn2 = (Xn1 + inNum/Xn1)/2; //牛顿法更新公式
}
res = Xn2;
}
return true;
}
运行截图如下: