**
eg1:数列求值
**
不用数组的递推算法(简单)
新值覆盖旧值
#include <stdio.h>
//正推
int main(int argc, const char * argv[]) {
// insert code here...
int a1 = 1,a2 = 1,t;
printf("%d = %d\n",1,a1);
printf("%d = %d\n",2,a1);
for (int i = 1; i <= 8; i++) {
t = a1 + a2;//第三个
a1 = a2;
a2 = t;
printf("%d = %d\n",i+2,t);
}
return 0;
}
用数组之后,区别就是,每一个数都被存起来了
#include <stdio.h>
int main(int argc, const char * argv[]) {
int arr[10]={[0]=1,[1]=1};
printf("%d\n",arr[0]);
printf("%d\n",arr[1]);
for (int i = 2; i < 10; i++) {
arr[i] = arr[i-1]+arr[i-2];
printf("%d\n",arr[i]);
}
return 0;
}
**
eg2:猴子吃桃
**
1不用数组。注意值的变化。
#include <stdio.h>
//反推
int main(int argc, const char * argv[]) {
int day = 10,a = 1,t;
while (day > 0) {
//找到一个通项之后再进行循环
t = a+2;//化简过后的等式
printf("%d = %d\n",day,a);
a = 2*(t-1);
day--;
}
return 0;
}
2有数组
#include <stdio.h>
//反推
int main(int argc, const char * argv[]) {
int arr[10]= {[9]=1};
for (int i = 8; i >= 0; i--) {
arr[i] = 2*arr[i+1]+2;
}
printf("%d",arr[0]);
return 0;
}
总结
打好草稿
理清思路
看正解容易还是反推
变得和不变的值确定好
不用数组的话注意哪些值在循环中会变化
用数组的话注意赋初始值