递推算法(简单)用数组和不用数组:eg1:Fibonacci数列:第一项为1,第二项为1,后一项等于前两项之和 ask the 10 num;eg2:猴子吃桃问题

**

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;
}

总结
打好草稿
理清思路
看正解容易还是反推
变得和不变的值确定好
不用数组的话注意哪些值在循环中会变化
用数组的话注意赋初始值

发布了18 篇原创文章 · 获赞 0 · 访问量 202

猜你喜欢

转载自blog.csdn.net/weixin_46456339/article/details/105241821