C++编程《第07课 简单递推》教学课件.pptxVIP

  • 0
  • 0
  • 约2.4千字
  • 约 21页
  • 2026-03-10 发布于广西
  • 举报

C++编程《第07课 简单递推》教学课件.pptx

第07课;学习目标;知识讲授;递推是一种处理问题的重要方法。递推通过对问题的分析,找到问题相邻项之间的关系(递推式),从起点出发(首项或者末项)然后使用循环不断地迭代,得到最后需要的结果。

;对于Fibonacci数列:

已知:fib(1)=1;fib(2)=1;从第三项开始满足公式:

fib(i)=fib(i-1)+fib(i-2)。

输入一个整数n(1=n=100),求fib(n)的值。;问题求的是斐波那契数列第i项的数值。

前两项的数值,题目中已经给出,分别为:

fib(1)=1;fib(2)=1;

从第3项开始,满足如下规律:fib(i)=fib(i-1)+fib(i-2);

即当前项由前两项之和构成。

我们可以根据题目给出的fib(1)、fib(2)推出fib(3),再按照顺序由fib(2)、fib(3)推出fib(4),以此类推。;#includebits/stdc++.h

usingnamespacestd;

intmain()

{

longlongn,f1,f2,f3;

cinn;

f1=f2=f3=1;//初始化,f3表示第n项

for(longlongi=3;i=n;i++)

{

f3=f1+f2;

f1=f2;

f2=f3;

}

coutf3;

return0;

};递推分析实例;问题分析;我们能够发现,从第3个月起,每个月的兔子数量都等于:

(上个月的兔子数量)+(2个月前的兔子数量)。

因为2个月前的兔子,在当前月份时都已成熟,每对兔子都可以增加一对小兔子。

抽象分析:

设第n个月的兔子为f(n),第n个月成熟兔子为g(n),第n个月新生的兔子为x(n);

那么f(n)=g(n)+x(n)

又∵g(n)=f(n-1),x(n)=g(n-1)=f(n-2)

∴f(n)=f(n-1)+f(n-2);#includebits/stdc++.h

usingnamespacestd;

intmain()

{

longlongn,f1,f2,f3;

cinn;

f1=f2=f3=1;//初始化,f3表示第n项

for(longlongi=3;i=n;i++)

{

f3=f1+f2;

f1=f2;

f2=f3;

}

coutf3;

return0;

};课堂练习;【描述】科学家发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵(当月不能产卵),每对卵要过3个月长成成虫。假设每个成虫不死,第一个月有一对成虫,问第z个月有多少对成虫。

【输入】1行3个整数,x,y,z

【输出】1行;第z个月的成虫数量;设第n个月的成虫为f(n),第n个月已经有的老成虫为g(n),第n个月新成虫为t(n),第n个月新增卵为L(n),那么:

f(n)=g(n)+t(n)

g(n)=f(n-1)(老成虫和上一个月的所有成虫数量相等)

t(n)=L(n-3)(新成虫由3个月前的新卵长成)

L(n)=y*f(n-x)(新增卵由x月前的成虫生下,每对虫生y对卵)

所以:L(n-3)=y*f(n-3-x)

f(n)=f(n-1)+L(n-3);L(n)=y*f(n-x);或者化简为下式:

f(n)=f(n-1)+y*f(n-3-x);n-3-x>=1,n=x+4;

从1到x+3个月的成虫需要我们初始化为1(过x个月产卵,再过3个月才变成虫);#includebits/stdc++.h

usingnamespacestd;

longlonga[101],b[101];

//a[i]表示第i个月的成虫数

//b[i]表示第i个月新增的虫卵

intmain(){

intx,y,z;

cinxyz;

for(inti=1;i=x;i++)a[i]=1,b[i]=0;

for(inti=x+1;i=z;i++){

b[i]=y*a[i-x];//第i个月新增虫=i-x个月的成虫数量*产卵数

a[i]=a[i-1]+b[i-3];

}

couta[z];

return0;

};【描述】楼梯有n(1=n=100)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,编程计算共有多

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档