关于斐波那契数列和递归

递归有三个基本点:

1.递归总有一个最简单的情况。即边界或者跳出递归的条件语句;

2.递归总是尝试解决一个规模更小的问题;

3.递归尝试解决的父问题和子问题之间不因该有交集;

以下是几个递归代码://斐波那契数列

import edu.princeton.cs.algs4.StdOut;

public class No_1_1_19 {
	public static void main(String[] args)
	{
		for(int n=0;n<10;n++)
		{
			StdOut.println(n+" "+f(n));

		}
	}

	public static long f(int n)
	{
		if(n==0)
			return 0;
		if(n==1)
			return 1;

		return f(n-1)+f(n-2);
	}
}

  运行结果:

用一个数组来存储斐波那契数列,并且用循环来实现;

import edu.princeton.cs.algs4.StdOut;

public class No_1_1_19 {
	public static void main(String[] args)
	{
		int n=20;

	int[] a = new int[n];
	a[0]=0;
	a[1]=1;
	for(int i=2;i<n;i++)//用循环来实现
	{
		a[i] = a[i-1] + a[i-2];
	}

	for(int i=0;i<n;i++)//输出结果
		StdOut.println(i+" "+a[i]);

}
}

  结果如下:

原文地址:https://www.cnblogs.com/qinmin/p/12268870.html

时间: 2024-12-12 11:14:10

关于斐波那契数列和递归的相关文章

斐波那契数列高效递归求法

时间:2014.05.19 地点:图书馆 ------------------------------------------------------------------- 一.简述 前面给出了一种斐波那契数列解法的矩阵幂方法,这是最高效的方法,时间复杂度为O(log).正常来说通过递推公式 F(n)=F(n-1)+F(n-2)直接来计算F(n)效率是很差的,因为这里会涉及很多冗余计算,比如求F(5),我们要求[F(4)和F(3)],[要求F(4)则得求F(3)和F(2),要求F(3)得求F

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

实现斐波拉契数列: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) 方法二:非递归数组

【剑指offer】斐波那契数列(递归和非递归实现)

递归实现是最常想到的方法,代码如下: //递归方式 long Fibonacci(unsigned n) { if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); } } 显然递归并不是最好的方法,当n较大时效率将非常低下. 较好的思路是: 从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)--依此类推就可以算出第n

斐波那契数列和递归实现阶乘

package com.lv.study; public class DemoAm4 { //斐波那契数列:生兔子 :从1和1开始 后面一个数等于前面两个数之和 public static void main(String[] args) { test2(); } public static void test2(){ int num1=1; int num2=1; int result =0;//暂时不知道结果 //推算第5轮结果 int n=5; System.out.print("1\t1

C语言编程实现斐波那契数列(递归与非递归)

一.非递归 <1>数组 #include<stdio.h> #include<stdlib.h> int main() { int a[10000] = { 0 };//利用数组求不了较大位置的斐波那契数 int i,m; a[0] = 1; a[1] = 1; printf("请输入要求第几个斐波那契数(大于等于2)\n"); scanf("%d", &m); for (i = 2; i <=m; i++) { a

斐波那契数列的递归和非递归解法

//递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1; } return fib(n - 1) + fib(n - 2); } //非递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1

斐波那契数列(递归)c#

我郑重宣布 我爱递归 我自己编程几乎都没用过递归 我看到这个题的时候虽然想到了用递归 但是我个脑残一直在想怎么设置动态数组 明明纯递归更简单 我也是可无语 反正我爱上递归了 爱惹  无法自拔 原文地址:https://www.cnblogs.com/ywfp-lee/p/11774462.html

斐波那契数列的递归实现

兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.假设所有兔子都不会死去,能够一直干下去,那么以后可以繁殖多少对兔子呢? 月数 1 2 3 4 5 6 7 8 9 10 11 12 兔子对数 1 1 2 3 5 8 13 21 34 55 89 144 所以我们找到了规律,从第三个月起,每个月的兔子对数都等于前两个月的兔子对数之和 那么我们用代码来表示 package com.sbtufss.test; public class Test { public static voi

c#斐波那契数列(Fibonacci)(递归,非递归)

public static int Foo(int i)        {            if (i < 3)            {                return 1;            }            else            {                return Foo(i - 1) + Foo(i - 2);            }        } static void Main(string[] args)        {