递归求斐波那契数

斐波那契数列主要思想是利用前两个数求和算出下一个数,利用函数的递归思想,F(n)=F(n-1)+F(n-2),F(n)先搁置,计算F(n-1),要计算F(n-1)就要先计算F(n-2)和F(n-3),依次递归下去,直到第一第二位数,这两个数是已知的,这样就可以回去一层一层的算出F(3)、F(4)、F(5)....F(n-2)、F(n-1),最后得到F(n)的值。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Data;
 6 using System.Data.SqlClient;
 7 //递归算法求斐波那契数列
 8 namespace test3
 9 {
10     class Program
11     {
12         static void Main(string[] args){
13             long i=Convert.ToInt64(Console.ReadLine());//读入位数
14             Console.WriteLine("第{0}位斐波那契数为:{1}",i, Foo(6));
15         }
16         public static int Foo(int i) {
17             if (i <= 0) return 0;
18             else if (i > 0 && i <= 2) return 1;
19             else return Foo(i - 1) + Foo(i - 2);
20         }
21     }
22 }

PS:Console.Read()用来读取输入的第一个字符,Console.ReadLine()用来读取一行字符串,Console.ReadKey()也是用来读取第一个字符,但不需要敲回车键就能继续执行代码。另外不管是Read()或Write()输入输出的都是字符型,数字需要用Convert()函数转换得来。

时间: 2024-11-05 22:05:22

递归求斐波那契数的相关文章

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特点: 存在限制条件,当符合这个条件时递归便不再继续: 每次递归调用之后越来越接近这个限制条件. 递归使用最常见的一个例子就是求阶乘,具体描述和代码请看这里:C语言递归和迭代法求阶乘 但是,递归函数调用将涉及一些运行时开销--参数必须压到堆栈中,为局部变量分配内存空间(所有递归均如此,并非特指求阶乘这个例子),寄存器的值必须保存等.当递归函数的每次调用返回时,上述这些操作必须还原,恢复成原来的样子.所以, 基

php 两种方式实现求 斐波那契数

使用递归方式. //使用递归方式求斐波那契数 public function fb($n){ // if( $n <=2){ return 1; }else{ return fb($n-1) + fb($n-2); } } 使用递推方式. //使用递推方式求斐波那契数 public function fb2($n){ // if( $n <=2){ return 1; } $t1 = 1;$t2 = 1; for($i=3;$i<$n;$i++){ $temp = $t1; $t1 =

hdu1568&amp;&amp;hdu3117 求斐波那契数前四位和后四位

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=20的时候,不足四位,所以直接打表. 当n>20的时候,大于四位的时候,ans满足这个公式:ans=-0.5*log10(5.0)+num*1.0*log10((1+sqrt(5.0))/2.0); 这个公式是怎么来的呢?我们可以对an取10的对数,根据对数的性质. log10(ans)=log10(1/

249 递归:概念,利用递归求1~n的阶乘,利用递归求斐波那契数列,利用递归遍历数据

6.1什么是递归 递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数. 简单理解: 函数内部自己调用自己, 这个函数就是递归函数 注意:递归函数的作用和循环效果一样,由于递归很容易发生"栈溢出"错误(stack overflow),所以必须要加退出条件return. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g

求斐波那契数的python语言实现---递归和迭代

迭代实现如下: def fab(n): n1 = 1 n2 = 1 if n<1: print("输入有误!") return -1 while (n-2)>0: n3 = n2+n1 n1 = n2 n2 = n3 n-=1 return n3 number = int(input("请输入要求的斐波那契数的第几个数:")) result = fab(number) print(result) 递归实现如下: def fab(n): if n==1 o

递归求斐波那契数列

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.Write("输入想求的斐波那契数列项数:"); int n = Conver

HDU 1568 Fibonacci【求斐波那契数的前4位/递推式】

Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来. 接下来,CodeStar决定要考考他,于是每问他一

使用递归方式和非递归方式求斐波那契数

/** * 非递归斐波那契数列 * @param args */ public static int getFieibolaLie(int number) { int data = 0; int n = 1; int m = 1; if (number <= 0) { return -1; } if (number == 1 || number == 2) { return 1; } while (number >= 2) { data += n; n = m; m = data; numbe

动态规划对比递归----以求斐波那契数列为例

下面是递归方式: private static int Fib_RE(int n) { re_Count++; if(n<=1) { return 1; } else { return Fib_RE(n-1) + Fib_RE(n-2); } } 下面是动态规划: private static int Fib_Fast(int n,Dictionary<int, int> dic) { fa_Count++; if(!dic.ContainsKey(n)) { dic.Add(n, Fi