2020年10月22日 斐波那契数列

**

题目描述

**
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n<=39

自己的分析

利用arraylist的add和get函数实现,方法简单

import java.util.ArrayList;
public class Solution {
    public int Fibonacci(int n) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(1);
        if(n==0){
        return 0;
        }
        if(n==1){
        return 1;
        }
        int i = 1;
        while(i!=n){
            list.add(list.get(i)+list.get(i-1));
            i++;
        }
        return list.get(i);
    }
}

但是实际上这个题目有多种解法
递归,记忆化搜索,动态规划和动态规划的空间优化。

方法一:递归
题目分析,斐波那契数列公式为:f[n] = f[n-1] + f[n-2], 初始值f[0]=0, f[1]=1,目标求f[n]
看到公式很亲切,代码秒秒钟写完。

public class Solution {
    public int Fibonacci(int n) {
        if(n==0||n==1){
            return n;
        }
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

优点,代码简单好写,缺点:慢,会超时
时间复杂度:O(2^n)
空间复杂度:递归栈的空间
###方法二:记忆化搜索
拿求f[5] 举例在这里插入图片描述


动态规划

但是如果想让空间继续优化,那就用动态规划,优化掉递归栈空间。
动态规划不同的是,不用递归的过程,直接从子树求得答案。过程是从下往上。

public class Solution {
    public int Fibonacci(int n) {
         int[] fi = new int[n+2];
         fi[0]=0;
        fi[1]=1;
        for(int i = 2;i<=n;i++){
            fi[i] = fi[i-1] + fi[i-2];            
        }
        return fi[n];
    }
}
``` {—————————————— 系统参数模块 ——————————————} SW1_CODE := INBLOCK('申万一级') * 1; TOTAL_MV := FINANCE(7) / 100000000; { 单位统一转换为亿,避免后续计算溢出 } {——行业轮动优化——} INDU_REL_STR := EMA(C / MAX(FINANCE(45), 0.000001), 20) * 0.55 + EMA(C / MAX(FINANCE(48), 0.000001), 10) * 0.35 + IF(HKHOLD(5) > 0, HKHOLD(5) / MA(HKHOLD(5), 20), 0) * 0.1; {——估值因子重构——} EPS_TTM := FINANCE_EX(1, 0, 0); DYNPETTM := IF(EPS_TTM > 0.2, C / MAX(EPS_TTM, 0.2), 1000); EVEBITDA := (C * FINANCE(1) + FINANCE(20) - FINANCE(22)) / MAX(FINANCE(23), FINANCE(1) * 0.01); {——波动率优化——} VOL_REGIME := EMA(STD(C, 60) / MA(C, 60), 5); VAR_PERIOD := IF(VOL_REGIME < 0.05, 55, IF(VOL_REGIME < 0.1, 34, IF(VOL_REGIME < 0.15, 21, 13))); VAR_PERIOD := WMA(VAR_PERIOD, 3) * 0.6 + WMA(VAR_PERIOD, 5) * 0.4; {——资金监控体系——} NORTH_FLOW := HKHOLD('A') / TOTAL_MV * 100; { 同步使用修正后变量名 } NORTH_ALPHA := SLOPE(EMA(NORTH_FLOW, 5), 5) / STD(NORTH_FLOW, 20); {——机器学习模块——} MOM_WEIGHT := CORR(ROC(C, 20), INDU_REL_STR, 60) * 0.7 - STD(MACD_POWER, 20) * 0.3; FACTOR_SYN := MOM_WEIGHT * INDU_REL_STR + (RANK(DYNPETTM) + RANK(EVEBITDA)) / 2 * 0.45; {——核心信号引擎——} VALUATION := DYNPETTM < PERCENTILE(DYNPETTM, 90, 0.3) AND EVEBITDA < PERCENTILE(EVEBITDA, 90, 0.25) AND PEG_VAL < 0.9 AND PEG_VAL > 0.2; TREND_SIG := CROSS(EMA(C, 5), EMA(C, 13)) AND EMA(C, 13) > EMA(C, 34) AND C / EMA(C, 89) > IF(VOL_REGIME < 0.08, 1.028, 1.016); MOM_SIG := MACD_POWER > IF(VOL_REGIME < 0.1, 0.5, 0.8) AND SLOPE(VOLATILITY, 5) < 0; REALTIME_SIG := V > MA(V, 20) * 1.25 AND (C - L) / REF(H - L, 1) > 0.618 AND LIQUIDITY > IF(VOL_REGIME < 0.1, 1.1, 1.25); {——信号合成——} FINAL_SIGNAL := FILTER( VALUATION AND TREND_SIG AND MOM_SIG AND FACTOR_SYN > PERCENTILE(FACTOR_SYN, 70) AND NORTH_ALPHA > 0.5, 3), LINETHICK2; REALTIME_ALERT := FILTER( FINAL_SIGNAL AND REALTIME_SIG AND BETWEEN(TIME, 93000, 145500) AND VOLATILITY < PERCENTILE(VOLATILITY, 60), 0), COLORMAGENTA;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信量化择时周线选股】代码,我的选股逻辑是什么?用2018-2024全A股回测验证选股逻辑的准确性,并提出优化建议和方案,优化选股逻辑和所有参数计算关系和信号触发条件,是否选到股票市场情绪启动,即将启动主升浪的盘中异动股票,及线盘中预警选股和盘后选股,优化选股条件,去除冗余选股条件,月胜率提高至85%以上,有效信号准确率90%以上】,请帮我检查并补全正确代码,生成修正后完整代码。
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值