- UID
- 2
- 积分
- 2893097
- 威望
- 1396580 布
- 龙e币
- 1496517 刀
- 在线时间
- 13326 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-26
|
斐波那契弧线
斐波那契弧线,也称为斐波那契扇形线。第一,此趋势线以二个端点为准而画出,例如,最低点反向到最高点线上的两个点。然后通过第二点画出一条“无形的(看不见的)”垂直线。然后,从第一个点画出第三条趋势线:38.2%, 50%和61.8%的无形垂直线交叉。
斐波纳契弧线,是潜在的支持点和阻力点水平价格。斐波纳契弧线和斐波纳契扇形线常常在图表里同时绘画出。支持点和阻力点就是由这些线的交汇点得出。
要注意的是弧线的交叉点和价格曲线会根据图表数值范围而改变,因为弧线是圆周的一部分,它的形成总是一样的。
质数
斐波那契质数由斐波那契序列中的质数组成,是整数质数序列。
第一组质数序列是:2,3,5,13,89,233,1597,28657,514229,433494437,2971215073……
C#代码实现- public static int GetiNum(int i) {
- long preVal = 1;
- long prePreVal = 0;
- if (n < 2)
- return n;
- long loop = 1;
- long returnVal = 0;
- while (loop < n) {
- returnVal = preVal + prePreVal;
- prePreVal = preVal;
- preVal = returnVal;
- loop++;
- }
- return returnVal;
- }
复制代码 Java代码实现- //①==================================
- /**
- * 平推方法实现
- */
- public static long fibLoop(int num) {
- if(num < 1 || num > 92)
- return 0;
- long a = 1;
- long b = 1;
- long temp;
- for(int i = 2; i < num; i++) {
- temp = a;
- a = b;
- b += temp;
- }
- return b;
- }
-
- //②==================================
- /**
- * 递归方法实现
- * f(n) = f(n - 1) + f(n - 2)
- * 最高支持 n = 92 ,否则超出 Long.MAX_VALUE
- * @param num n
- * @return f(n)
- */
- public static long fibRec(int num) {
- if(num < 1)
- return 0;
- if(num < 3)
- return 1;
- return fibRec(num - 1) + fibRec(num - 2);
- }
-
- //③==================================
- static long[] l = new long[93];
- static {
- l[1] = 1;
- }
- /**
- * 带有缓存的方法,比fibRec方法性能好很多
- */
- public static long fibBuffRec(int num) {
- if(num < 1 || num > 92)
- return 0;
- if(l[num] == 0)
- l[num] = fibBuffRec(num - 1) + fibBuffRec(num - 2);
- return l[num];
- }
-
- //④==================================
- static List<BigDecimal> list = new ArrayList<BigDecimal>(93);
- static {
- list.add(BigDecimal.ZERO);
- list.add(BigDecimal.ONE);
- }
- /**
- * 1,2,3,4,5,6, 7 ,8
- * 1,1,2,3,5,8,13,21
- * 支持num超过92的超大型数字,使用了ArrayList进行缓存以提高性能
- */
- public static BigDecimal fibBig(int num) {
- if(num < 0)
- return list.get(0);
- if (list.size() <= num)
- list.add(fibBig(num - 1).add(fibBig(num - 2)));
- return list.get(num);
- }
复制代码 Javascript代码实现- //循环算法
- function f(n){
- if(n == 0){
- return 0;
- }else if(n ==1){
- return 1;
- }else{
- var fn1 = 0;
- var fn2 = 1;
- var fnx = 0;
- for(var i=0;i<n-1; i++){
- var newfn1 = fn2;
- fnx = fn1 + fn2;
- fn1 = fn2;
- fn2 = fnx;
- }
- return fnx;
- }
- }
- //===============================
- //递归算法
- function fib(count) {
- //参数判断
- var count = parseInt(count);
- if (isNaN(count) || count <= 0) {
- return 0;
- }
- function f(count) {
- if (count <= 2) {
- return 1;
- }
- return f(count - 1) + f(count - 2);
- }
- return f(count);
- }
复制代码 C++代码实现
基本循环算法- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int a=0,b=0,c=1,n;
- cin>>n;//输入n
- for(int i=1;i<=n-1;i++)
- {
- a=b;
- b=c;
- c=a+b;
- }
- cout<<c;//输出最终结果
- return 0;
- }
复制代码 数组算法实现- #include<iostream>
- using namespace std;
- int main()
- {
- int a[30],i,n;
- cin>>n;
- a[1]=a[0]=1;
- for(i=2;i<n;i++)
- {
- a[i]=a[i-2]+a[i-1];
- }
- cout<<a[n-1];
- return 0;
- }
复制代码 递归算法实现- #include<iostream>
- using namespace std;
- int f(int n)
- {
- return (n<3)? 1 : f(n-1)+f(n-2);//如果是前两项,则输出1
- }
- int main()
- {
- int n;
- cin>>n;
- cout<<f(n);
- return 0;
- }
复制代码 递归算法优化- # include <bits/stdc++.h>
- const int MAX=101;
- using namespace std;
- int a[MAX];
- int f(int n)
- {
- if(a[n]!=-1) return a[n];
- else
- {
- a[n]=f(n-1)+f(n-2);
- return a[n];
- }
- }
- int main()
- {
- int n;
- cin>>n;
- for(int i=0;i<=MAX-1;i++)
- {//初始化
- a[i]=-1;
- }
- a[0]=0;a[1]=1;
- cout<<f(n);
- return 0;
- }
复制代码 高精度计算- #include <bits/stdc++.h>
- using namespace std;
- char sum[1200];
- int s=0,m=0,n;
- int main()
- {
- cin>>n;
- string s1,s2;
- int a[1200],b[1200];
- int he,i;
- s1="0";
- s2="1";
- for(m=2;m<n+1;m++)
- {
- memset(a,0,sizeof a);
- memset(b,0,sizeof b);
- a[0]=s1.length();
- for(i=1;i<=a[0];i++)
- {
- a[i]=s1[a[0]-i]-'0';
- }
- b[0]=s2.length();
- for(i=1;i<=b[0];i++)
- {
- b[i]=s2[b[0]-i]-'0';
- }
- he=(a[0]>b[0]?a[0]:b[0]);
- for(i=1;i<=he;i++)
- {
- a[i]+=b[i];
- a[i+1]+=a[i]/10;
- a[i]%=10;
- }
- he++;
- while((a[he]==0)&&(he>1))
- he--;
- for(i=he,s=0;i>=1;i--,s++)
- {
- sum[s]=a[i]+'0';
- }
- s1=s2;
- s2=sum;
- }
- cout<<s2<<endl;
- return 0;
- }
复制代码 Python3代码实现
#输出在3000以内的斐波那契数列
一、从最大值考虑- numMax = int(input('please input a maxnumber : '))
-
-
- def flibsOne(numMax):
-
- c = []
-
- a, b = 0, 1
-
- while a < numMax:
-
- a, b = b, a + b
-
- c.append(a)
-
- c.remove(c[-1])
-
- print(c)
复制代码 二、从位数考虑- num = int(input('please input a number : '))
-
- def flibsTwo(num):
-
- list1 = []
-
- for i in range(num):
- if i <=1:
- list1.append(1)
- else:
- list1.append(list1[-2] + list1[-1])
- return list1
-
- print(flibsTwo(num)) #输出num位数列
复制代码 第三种,根据f(n)= f(n-1)+f(n-2)实现- Fbs = [1,1]#斐波那契数列前两位
- n = 3
- s = input("Maxmun ")#输入最大次数
- while n != (int(s)+1) :#因为差一原则所以要再加一
- a = Fbs[-1]
- b = Fbs[-2]
- fb = a+b
- print(str(n)+" "+str(fb))
- n = n +1
- Fbs.append(fb)
复制代码 php代码实现- $n = 输入值;
- if ($n >= 3) {
- $x = 1;$y = 1;$n = $n - 2;
- do {
- $fs = $x + $y;
- $x = $y;
- $y = $fs;
- echo $fs.',';
- $n--;
- } while ($n > 0);
- }
复制代码 Rust代码实现- // Rust代码实现
-
- fn main() {
- println!("{} {} {} {} {}", fib(0), fib(1), fib(2), fib(3), fib(4));
- }
-
- fn fib(d: i32) -> i32 {
- if d == 0 || d == 1 {
- d
- } else {
- ficc(d - 2) + ficc(d - 1)
- }
- }
复制代码 |
|