迭代法
概念:迭代法(iteration)也叫“辗转法”,是一种不断用变量旧值推出新值的解决问题的方法。
步骤
1.确定迭代模型
根据问题描述,分析出前一个值与下一个值的迭代关系数学模型。
2.建立迭代关系式
递推数学模型一般是带下标的字母,在算法设计中要将其转换为“循环不变式”(迭代关系式)
3.对迭代过程进行控制
确定在什么时候结束迭代过程。
迭代模型是通过小规模问题逐步解决大规模问题的解。
1.递推法(正推)
问题:兔子繁殖问题(斐波拉契数列)
一对兔子从出生后第三个月开始,每月生一对兔子。小兔子到第三个月又开始生下一代兔子。假如兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少对兔子?
解决:
首先把情况列举出来,发现其中的规律,找到一个不变式(即循环不变式)
表格中是兔子的对数(不是只数)
| 1 | 2 | 3 | 4 | 5 | 6 | … |
|---|---|---|---|---|---|---|
| 1 | 1 | 1+1=2 | 2+1=3 | 3+2=5 | 5+3=8 | … |
说明:第一个月和第二个月都是一对兔子,因为兔子还没成熟(三个月成熟)。
第三个月生了一对小兔子,现在兔子总对数是两对。(1+1=2)
第四个月第一对兔子又生了一对(成熟兔子每个月都生一对),现在兔子总对数是3对。(2+1=3)
第五个月,两对成熟兔子生了两对,现在兔子总对数是5对。(3+2=5)
第六个月,三对成熟兔子生了三对,现在兔子总数是8对。(5+3=8)
…
以此类推,我们发现兔子数量符合以下规律:
//用三个变量实现数量的累加
c=a+b;
b=a;
a=c;
完整代码如下:
#include<iostream>
using namespace std;
int main(){
int i;
int a=1,b=1,c;//a,b代表第一个二月的兔子数量
//计算十二个月的兔子数量
for(i=0;i<12;i++){
c=a+b;
cout<<"第"<<i+1<<"个月兔子数量:"<<c<<endl;
b=a;
a=c;
}
return 0;
}
运行结果:

2.倒推法
概念:
从后向前推解问题,即由结果倒过来推解前提条件。
问题:猴子吃桃问题
一只小猴子摘了若干桃子,每天吃现有桃子的若干个多一个,到第10天时就只有一个桃子了,求原有多少个桃?
解决:
| 10 | 9 | 8 | … |
|---|---|---|---|
| 1 | (1+1)*2 | {[(1+1)*2]+1}*2 | … |
递推公式为(此处i和i-1为下标):
ai=(1+ai-1)*2 i=9,8,7,6,…,1
完整代码如下:
#include<iostream>
using namespace std;
int main(){
int i,a;
a=1;
for(i=9;i>=1;i--){
a=(a+1)*2;
}
cout<<"原有桃子数为:"<<a<<endl;
return 0;
}
运行结果:

最后
原创不易,如果对您有帮助,请点个赞再走呀(づ ̄3 ̄)づ╭❤ ~拜托啦
239

被折叠的 条评论
为什么被折叠?



