给定斐波那契数列的项数求对应的数值的普通方法和优化处理

 1 /**
 2  给定斐波那契数列的项数求对应的数值
 3  参考:剑指Offer
 4  */
 5 #include <stdio.h>
 6
 7 int fib(int n);
 8 long long fibonacci(unsigned int n);
 9 int main(int argc, const char * argv[]) {
10
11     int n;
12
13     while (1) {
14
15         printf("请输入你想知道到的斐波那契数列的项数:\t");
16         scanf("%d",&n);
17         int result = fib(n);
18         long long googResult = fibonacci(n);
19         printf("与之对应的斐波那契数列数列的值为:\t%d\t%lld\n\n",result,googResult);
20
21
22     }
23     return 0;
24 }
25
26
27 int fib(int n){
28
29     if(n == 0){
30         return 0;
31     }else if(n == 1){
32         return 1;
33     }else {
34         return fib(n-1) + fib(n-2);
35     }
36
37 }
38
39 //斐波那契数列数列求解优化
40
41 long long fibonacci(unsigned int n){
42
43     int result[] = {0,1};
44     if (n < 2){
45         return result[n];
46     }
47     long long smallest = 0;
48     long long smaller = 1;
49     long long temp = 0;
50
51     for(int i=2; i<=n; i++){
52
53         temp = smaller + smallest;
54
55         smallest = smaller;
56         smaller = temp;
57
58     }
59     return temp;
60
61 }
时间: 2024-10-14 22:46:12

给定斐波那契数列的项数求对应的数值的普通方法和优化处理的相关文章

斐波那契数列偶数项的和--Python

斐波那契数列(从第三项开始)的每一项的值均等于前两项之和.将第一项和第二项取1和2,那么数列的前10项将是:1,2,3,5,8,13,21,34,55,89……考虑斐波那契数列所有值不超过4000000的项,求出所有值为偶数的项的和.

斐波那契数列记录项

前言:f[n]=f[n-1]+f[n-2]:f[0]=0,f[1]=1; 这是斐波那契数列公式.如果要求F[N],要计算N次: 更一般的知道其只与n有关的公式: Fn=5√5((1+5√2)n−(1−5√2)n) Fn=5√5((1+5√2)n−(1−5√2)n) Fn=5√5((1+5√2)n−(1−5√2)n) a=sqrt(5)/5; b=(1+sqrt(5))/2; c=(1-sqrt(5))/2; fn=a(b^n-c^n);(不会Latex的痛, 如果答案是Mod的话,运算时有问题的

斐波拉契数列的递归、非递归、公式法多种方法实现

实现斐波拉契数列:1,1,2,3,5,8...,当n>=3时,f(n)=f(n-1)+f(n-2). 解:求解斐波拉契数列方法很多,这里提供了4种实现方法和代码,由于第5种数学公式方法代码太过繁琐,只做简单介绍 方法一:递归调用,每次递归的时候有大量重复计算,效率低,可将其调用的过程转化成一颗二叉树进行分析,二叉树的总结点个数不超过(2^n-1)个,由于其是不完全二叉树,那么函数计算的次数必小于(2^n-1),时间复杂度为O(2^n):递归调用的深度为n,空间复杂度为O(n) 方法二:非递归数组

手写代码之写斐波那契数列-传入key值求对应的value

public class Testany { public static void main(String[] args) { int value = number(10); System.out.println(value); } public static int number(int k){ int value = 0; int a = 1; int b = 1; for(int i =1; i<=k;i++){ value= a+b; a = b; b= value; } return

vijos - P1543极值问题(斐波那契数列 + 公式推导 + python)

P1543极值问题 Accepted 标签:[显示标签] 背景 小铭的数学之旅2. 描述 已知m.n为整数,且满足下列两个条件: ① m.n∈1,2,-,K ② (n^ 2-mn-m^2)^2=1 编一程序,对给定K,求一组满足上述两个条件的m.n,并且使m^2+n^2的值最大.例如,若K=1995,则m=987,n=1597,则m.n满足条件,且可使m^2+n^2的值最大. 格式 输入格式 输入仅一行,K的值. 输出格式 输出仅一行,m^2+n^2的值. 样例1 样例输入1[复制] 1995

快速求斐波那契数列(矩阵乘法+快速幂)

斐波那契数列 给你一个n:f(n)=f(n-1)+f(n-2) 请求出 f(f(n)),由于结果很大请 对答案 mod 10^9+7; 1<=n<=10^100; 用矩阵乘法+快速幂求斐波那契数列是经典应用: 矩阵公式 C i j=C i k *C k j; 根据递推式 构造2*2矩阵: 原始矩阵 1 0 0 1 矩阵 2 1 1 1 0 原始矩阵与矩阵 2相乘达到转化状态效果: 对矩阵二进行快速幂 乘法:达到快速转化矩阵的效果: 即使达到快速转化状态:那么大的数据范围也很难求解: 高精?这有

ACM2 斐波那契数列

描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就由之前的两数相加.首几个斐波那契数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,……………… 特别指出:0不是第一项,而是第

Python 斐波那契数列练习

# coding=gbk # 迭代法---1 def fibonacci (n): if n == 0 or n == 1: return n else : a = 0 b = 1 for i in range (n-1) : t = a a = b b = a + t return b number = eval (input ("请输入您要计算的斐波那契数列的项\n")) cc= fibonacci (number) print (cc) # 迭代法---2 def fibonac

【CF446C】DZY Loves Fibonacci Numbers (线段树 + 斐波那契数列)

Description ? 看题戳我 给你一个序列,要求支持区间加斐波那契数列和区间求和.\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). Solution ? 先来考虑一段斐波那契数列如何快速求和,根据性质有 \[ \begin {align} fib_n &= fib_{n - 1} + fib_{n - 2} \ &= fib_ {n - 2} + fib_{n - 3} + fib_{n - 2} \ &= fib_{n -