【课上笔记】由Fibonacci入手理解递归

一、Fibonacii数列相关的性质

1、通项公式
formula

2、 在较高的序列,两个连续的“斐波纳契数”的序列相互分割将接近黄金比例(1.618:1或1:0.618)。例如:233/144,987/610
3、 数列中任一项的平方数都等于跟它相邻的前后两项的乘积加1或减1
4、任取相邻的四个斐波那契数,中间两数之积(内积)与两边两数之积(外积)相差1

二、递推

注:体会递推的逻辑中重要的概念,递推边界和递推式
递推的形式

三、实例

1、求Fibonacci数列第n项<倒推>

int F(int n){
    if(n==0||n==1)return 1;//递归边界
    else return F(n-1)+F(n-2);//递归式
}

2、Number Sequence<顺推>

问题简述(原题点链接):

f(1)=1, f(2)=1, f(n)=(A*f(n-1)+B*f(n-2))mod7
输入A、B、n,求出f(n)的值
#include<iostream>
#include<cstdio>
using namespace std;

int f[1000];
int main()
{
    int n,a,b;
    while(cin>>a>>b>>n,a+b+n)//输入0 0 0即终止
    {
        f[0]=f[1]=1;
        int i;
        for( i = 2;i<1000;i++)
        {
            f[i]=(a*f[i-1]+b*f[i-2])%7;
            if(f[i]==1&&f[i-1]==1)
                break;
        }
        n=(n-1)%(i-1);
        cout<<f[n]<<endl;
    }
    return 0;
}

3、The Area

点击链接见大神
问题简述(原题点链接):求面积
求阴影面积
思路:膜拜过大神的我理清了思路((・◇・)?还没膜拜过?前面的链接别错过,那才是原汁原味)
把阴影分割成三角形P1P2P3和两个弓形;P1和P2、P1和P3再取中点P4和P5,即两个弓形里分别得到一个三角形和两个弓形;一次又一次地划分,直到三角形的边长接近0.

#include <stdio.h>
#include <math.h>
const double e=1e-3; //控制精度
double a,h,d;
double fx(double x)
{
    return a*(x-h)*(x-h)+d;
}
double area(double x1,double y1,double x2,double y2,double x3,double y3)
{
    double d1,d2,d3,p,s,x4,y4;
    d1=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
    if (d1<e) return 0; //精度有限
    d2=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
    d3=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); //求出3条边长
    p=(d1+d2+d3)/2;
    s=sqrt(p*(p-d1)*(p-d2)*(p-d3)); //海伦公式求三角形面积
    x4=(x1+x2)/2; y4=fx(x4);
    s+=area(x4,y4,x1,y1,x2,y2);
    x4=(x1+x3)/2; y4=fx(x4);
    s+=area(x4,y4,x1,y1,x3,y3); //二分法 求余下的面积
    return s;
}
int main()
{
    double x1,y1,x2,y2,x3,y3,s;
    int n,i;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
        h=x1; d=y1; 
        a=(y2-d)/(x2-h)/(x2-h); //求二次函数解析式
        s=area(x1,y1,x2,y2,x3,y3);
        printf("%.2lf\n",s);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值