zoukankan      html  css  js  c++  java
  • 初识迭代

    简单递归

    经典事例:斐波那契数列

    #include<iostream>
    using namespace std;
    
    int f(int n){
    int f(1)=1,f(2)=1;
    f(n)=f(n-1)+f(n-2);
    
    return f(n);
    }
    int main(){ cin>>n; cout<<f(n)<<endl;
    return 0; }

    所以,以上可知:
    例:f(5)=f(4)+f(3);
    f(4)=f(3)+f(2);
    f(3)=f(2)+f(1);
    ==>f(5)=5;
    其他类似也可以用数组代替,只要找到类似规律,即可以,例如:(洛谷的题P1028 数的计算)
    ===》
    首先要计算出当自然数(num)为0 , 1 的时候,种类(count)为 1
    (找出的规律)则 num =2, count =2 , 即2,12;
    num =3, count =2 , 即3,13;
    num =4, count =4 , 即4,14,24,124;
    num =5, count =4 , 即5,15,25,125;
    num =6, count =6 , 即6,16,26,126,36,136;
    num =7, count =7 , 即7,17,27,127,37,137;
    .....
    以上可知,f(2n) =f(2n+1),即f(2)和f(3)相等,f(4)和f(5)相等 ...
    而f(2n) = f(2n-1) + f(2n/2); 即f(4)=f(3)+f(2)=2+2; f(6)=f(5)+f(3)=4+2=6;
    所以可以得出结论:
    if(n%2==0) f(n)=f(n-1)+f(n/2);
    if(n%2==1) f(n)=f(n-1);
    且初始条件(两个特殊值):f(0)=1,f(1)=1;
    所以:
    for(int n=2;i<=n;i++){
    if(n%2==0) f(n)=f(n-1)+f(n/2);
    if(n%2==1) f(n)=f(n-1);
    }
    f()即为f[]数组;

  • 相关阅读:
    华为lab-rs-v1-2.11_OSPF与ISIS互通
    jdk源码分析红黑树——插入篇
    jdk源码分析PriorityQueue
    jdk源码分析ArrayDeque
    jdk链表笔记
    jdk顺序表笔记
    SpringMVC类型转换器、属性编辑器
    SpringMVC基本使用
    spring整合hibernate
    spring aop注解配置
  • 原文地址:https://www.cnblogs.com/zmz-zero/p/12260304.html
Copyright © 2011-2022 走看看