斐波那契递归和非递归俩种算法实例

package testcase;
/**
 *
 * @decription
    \     \\_
  .---(‘)
o( )_-\_ 斐波那契递归和非递归俩种算法实例
 * @author bjliuzezhou
 * @date 2016年2月23日
 */
public class TypicalArithmetic_01 {

    public static void main(String[] args) {
        System.out.println(fn(6));
        System.out.println(noRecursion(6));
    }

    public static int fn(int n){
        if(n==0 | n==1)
            return 1;
        else
            return fn(n-1) + fn(n-2);

    }

    public static int noRecursion(int n){

        if(n==0 | n==1)
            return 1;
        else{
            int first = 1;
            int second = 1;
            int total = 0;
            for(int i=2; i<=n; i++){

                total = first + second;
                first = second;
                second = total;
            }

            return total;
        }

    }
}
时间: 2024-10-09 21:33:09

斐波那契递归和非递归俩种算法实例的相关文章

斐波那契数列的非递归

int func(int n){ if (n ==0) return 0; if (n == 1) return 1; int p = 0; int q = 1; for (int i = 1; i < n; i++){ int tmp = p; p = q; q = tmp + p; } return q; } 还有一种方法是使用一个全局数组来保存递归中已经计算过的数 int func(int n){ int memo[n+1]; fib(n); } int fib(int n){ if (n

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

#include <stdio.h> #include <stdlib.h> void f(int n); int main(void) { f(10); return 0; } void f(int n) { if(n==1) { printf("1\n"); return; } if(n==2) { printf("1 1\n"); return; } printf("1 1 "); int* p=(int*)mall

【动态规划专题】1:斐波拉契数列问题的递归和动态规划

<程序员代码面试指南--IT名企算法与数据结构题目最优解> 左程云 著 斐波拉契数列问题的递归和动态规划 [题目]:给定整数N,返回斐波拉契数列的第N项.补充问题1:给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法.补充问题2:假设农场中成熟的母牛每年只会生产1头小母牛,并且永远不会死.第一年农场只有1只成熟的母牛,从第2年开始,母牛开始生产小母牛.每只小母牛3年后成熟又可以生产小母牛.给定整数N,求出N年后牛的数量. [举例]斐波拉契数列f(0)=0, f(1)=1,f(

通过“”斐波那契数列“”学习函数递归

斐波那契数列: f(0) = 0  f(1) = 1 f(2) = 1 f(3) = 2  f(4) = 3   f(5) = 8 .......f(n) = f(n - 2) + f(n - 1) 实现方法一: #这个方法使用列表,将结果保存def fbis(num): result = [0,1] for i in range(num - 2): result.append(result[-2] + result[-1]) return result 实现方法二: def fbis_othe

JS 从斐波那契数列浅谈递归

一.前言 昨晚下班后,经理出于兴趣给我们技术组讲了讲算法相关的东西,全程一脸懵逼的听,中途还给我们出了一道比较有趣的爬楼问题,问题如下: 假设一个人从地面开始爬楼梯,规定一步只能爬一坎或者两坎,人只能往上走,例如爬到第一坎,很明显从地面到第一坎只有一种可选方式,从地面爬到第二坎,他可以从地面直接跨到第二坎,也可以先从地面到第一坎,再从第一坎到第二坎,也就是2种可选方式,那么求他爬到N楼一共有几种可选方式. 这道题涉及到了斐波那契数列,要求使用递归来求值,技术贼菜的我也是一脸懵逼,所以本着学习的心

斐波那契列数列的递归与迭代

谈到斐波那契数列 常想到的是递归,由于在电脑中存储数据是开辟栈来存储,若是所要计算的值太大,要面对两个问题,一个是时间问题:对一数的计算,递归和回溯过程中会重复对一个值(例如f(3))进行开辟空间释放空间,因而会十分耗时:另一个问题是空间问题:由于系统分给程序的栈空间是有限的,当数字太大,最终产生的栈空间的情况,即栈溢出,导致我们无法计算. 第二个想到的是通过数组来存储,即将每一个计算后的值都存到数组里,虽然解决了在时间上的问题,但也会出现栈溢出,无法计算大的斐波那契数. 为了解决大数问题同时提

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

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

4.1 斐波那契系列问题的递归和动态规划

[题目]: 给定整数N,返回斐波那契数列的第N项 [补充题目1]: 给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法 举例: N=3,可以三次都跨1个台阶:也可以先跨2个台阶,再跨1个台阶:还可以先跨1个台阶,再跨2个台阶.所以有三种走法,返回3 [补充题目2]: 假设农场中成熟的母牛每年只会生1头小母牛,并且永远不会死.第一年农场有1只成熟的母牛,从第二年开始,母牛开始生小母牛.每只小母牛3年之后成熟又可以生小母牛.给定整数N,求出N年后牛的数量 举例: N=6, 第1年1

17. 计算斐波那契数(非递归方法)

题目: 编写非递归函数计算斐波那契数 Fn .对于每一个斐波那契数,你的代码应该只计算一次.测试你的代码. 思路: 非递归算法,要从正向进行迭代计算.我们统一一下定义:数列从 1 开始,即F(1) = 1, F(2) = 1. 利用三个变量:fib_front,fib_behind, fib.顾名思义,fib_front代表靠前的一个数,fib_behind代表靠后的一个数, fib代表当前的数.每次循环,将靠后的数值给靠前的那个,再将当前数的值给靠后的那个,这样就完成了一次迭代. 代码: 1