利用JavaScript打印出Fibonacci数(不使用全局变量)

汤姆大叔的博客里看到了6个基础题目:本篇是第4题 - 利用JavaScript打印出Fibonacci数(不使用全局变量)

解题关键:

1、Fibonacci数列的规律

2、递归

解点1:Fibonacci数列的规律

1,1,2,3,5,6,13,19,32....  //从第3项开始,每项都是前两项之和

解点2:递归

递归是一个复杂的概念,此题可以不用递归解决,但题目要求不能使用全局变量,所以我只能想到递归方法。简单的说,递归就是函数调用函数本身,但递归一定要有一个出口,否则就无限调用下去……下面对Fibonacci数列进行一下罗列并找规律:

第1项,1
第2项,第1项 + 第0项
第3项,第2项 + 第1项
.....
依此类推,那么可得

Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)

那么它的出口处就在1这里,即求的项数小于2时,直接返回1,而不再调用自己(一旦不调用自己了,也就意味着递归结束)

以下是该题的实现代码:

function Fibonacci(n) { //显示Fibonacci的前n项
    function Fibo(i) { //求Fibonacci的第i项
        return i<2 ? i : Fibo(i-1) + Fibo(i-2); //此处定义了递归的规则
    }
    for(var i=1; i<=n; i++) {
        console.log( Fibo(i) );
    }
}
Fibonacci(5);  //1,1,2,3,5

此题解答完毕!

时间: 2024-09-27 04:24:16

利用JavaScript打印出Fibonacci数(不使用全局变量)的相关文章

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi

利用 JavaScript SDK 部署网页版“Facebook 登录”

利用 JavaScript SDK 部署网页版"Facebook 登录" 通过采用 Javascript 版 Facebook SDK 的"Facebook 登录",用户可以使用 Facebook 凭据登录您的网页.即使您因为一些原因而无法使用我们的 JavaScript SDK,也一样可以实施"Facebook 登录". 要在不使用 JavaScript SDK 的情况下实施"Facebook 登录",请参阅手动构建登录流程

每日一小练——高速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: 尝试寻找高速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然非常easy,分分钟就超神..奥,不正确就攻克了! 事实上题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,只是由于求解高速方法在递归之前,我编写了一个非递归的算法 #include <iostrea

ACM Fibonacci数 计算

Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为F(n)=1 ...........(n=1或n=2)F(n)=F(n-1)+F(n-2).....(n>2)现要你来求第n个斐波纳奇数.(第1个.第二个都为1) 输入 第一行是一个整数m(m<5)表示共有m组测试数据每次测试数据只有一行,且只有一个整形数n(n<20) 输出 对每组输

JavaScript学习记录day5-函数的定义和调用

JavaScript学习记录day5-函数的定义和调用 [TOC] 1. 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义:abs是函数的名称:(x)括号内列出函数的参数,多个参数以,分隔:{ ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句.请注意,函数体内部的语句在

习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0)之间的所有Fibonacci数.所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列. 函数接口定义: int fib( int n ); void PrintFN( int m, int n ); 其中函数fib须返回第n项Fibonacci数:函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余

Fibonacci数

Fibonacci数 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为F(n)=1 ...........(n=1或n=2)F(n)=F(n-1)+F(n-2).....(n>2)现要你来求第n个斐波纳奇数.(第1个.第二个都为1) 输入 第一行是一个整数m(m<5)表示共有m组测试数据每次测试数据只有一行,且只有一个整形数n(n<20) 输出 对每组输入n,输出第n个Fibonacci数 实现: package July;

1143 多少个Fibonacci数

时间限制:500MS  内存限制:65536K提交次数:270 通过次数:16 题型: 编程题   语言: C++;C Description 给你如下Fibonacci 数的定义: F1 = 1 F2 = 2 Fn = Fn-1 + Fn-2 (n >= 3) 给你两个数a与b,现要求你计算在a与b之间(包括a.b)有多少个Fibonacci 数 输入格式 有多行,每行有两个数a.b,使用空格分隔,a <= b <= 10^100(即最大10的100次方) 最后一行为两个0 输出格式

hdu 2041(递推、dp/组合数学```其实就是Fibonacci数```)

最经典的Fibonacci数,上楼梯每次能跨一步或者两步,问有多少中跨法: 对于最后一次跨一步或者两步,走到第 i 阶,其种类总数就是走到 i - 1 的总数 + 走到i - 2 的总数:于是 a [ i ] = a [ i - 1 ] + a [ i - 2 ]:当然,那个时候的我是用```组合数学做的``` 1 #include<stdio.h> 2 long long c(int a,int b) 3 { 4 long long i,sum=1,j; 5 for (i=a,j=1;i&g