1. 程式人生 > >【遞迴】 之 菲波那契數列

【遞迴】 之 菲波那契數列

問題描述

菲波那契數列是指這樣的數列:數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。給出一個正整數a,要求菲波那契數列中第a個數是多少。
輸入資料
第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a(1 <= a <= 20)。
輸出要求
n行,每行輸出對應一個輸入。輸出應是一個正整數,為菲波那契數列中第a個數的大小。
輸入樣例
4
5
2
19
1
輸出樣例
5
1
4181
1

解題思路

這個題目要求很明確,因為a的規模很小,所以遞迴呼叫不會產生棧溢位的問題。設第n項值為f(n),則 f(n) = f(n-1)+f(n-2)。已知f(1)=1,f(2)=1,則從第3項開始,可以用公式求。

參考程式

#include <stdio.h>
int f(int a){
    if( a == 1 || a == 2 )  return 1;
    return f(a - 1) + f(a - 2);
}
void main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1; i <= n ; i++){
        int a;
        scanf("%d", &a);
        printf("%d\n", f(a));
    }
}


相關推薦

數列

問題描述 菲波那契數列是指這樣的數列:數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。給出一個正整數a,要求菲波那契數列中第a個數是多少。 輸入資料 第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a(1 <= a <

NOI1755:數列/ 2.2基本演算法和自呼叫函式

傳送門:檢視 1755:菲波那契數列總時間限制:  1000ms   記憶體限制:  65536kB 描述 菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。 給出一個正整數a,要求菲波那契數列中第

方法計算斐數列

參考: https://blog.csdn.net/xuzhangze/article/details/78568702 波那契數列數列從第3項開始,每一項都等於前兩項之和。即 第n項的值為  (n-1) + (n-2) 例如:數列 1, 1, 2, 3, 5, 8, 13, 21

一:斐數列

/** * 題目:斐波那契數列     * 描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39 * 解決方案:方法一:遞迴 *      &

方法---解決斐數列

遞迴方法 解決 菲波那切數列問題!!!! 3 public class Febonacci { 4 5 public static void main(String[] args) { 6 //斐波那契數列:1,1,2,3,5,8,13 7

的應用——斐數列、漢諾塔(Java實現)

package ch06; public class Fibonacci { public static int getNumber(int n) { if(n == 1) { return 0; } else if(n == 2){

java:練習(斐數列

package com.heima.test; public class Test5 { public static void main(String[] args) { demo1(); System.out.println(fun(8)); } //使用陣列求斐波那契數列

Java方法算斐數列的實現過程

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、…… 比如我們想求數列的第6位的值

《劍指Offer》和迴圈--斐數列

時間限制:1秒 空間限制:32768K 熱度指數:415020 題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 思路1:用遞迴 public class Solution

演算法實現斐數列

假定兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子? 這就是著名的斐波那契數列,也稱作兔子數列。 一、問題分析 剛開始,有1對幼兔,兔子總對數為1; 經過一個月後,幼兔長為小兔,兔子總對數為1

方法求斐數列的第n項

問題描述 第一項為0 第二項為1 ….. 第n項為前兩項之和 程式碼實現 max = int(input()) def fib(max): n,a,b=0,0,1 whi

使用棧(非方法)解決斐數列問題

解決斐波那契數列問題可以使用遞迴,迭代,以及使用棧等方法,下面講述使用棧的方法。 首先,我們從數列的遞迴呼叫樹就可以發現一些資訊。 要求第n個斐波那契數,就要向左下和右下走兩步。所以使用結構體,其中

演算法求斐數列的第N項值

#include <stdio.h> long fun(int g) { switch(g) { case 0: return 0; case 1: return 0; case 2: return 1; } return (fun(

Bailian2758 數列(2)

2758:菲波那契數列(2) 總時間限制: 1000ms 記憶體限制: 65536kB 描述 菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。 給出一個正整數a,要求菲波那契數列中第a個數對1000取模的結果是多少。 輸入 第1行是測試資料的組數n,後面跟著n行輸

C語言簡單的瞭解(求斐,n的階乘,字串長度,把一個整型(無符號),轉化為字元型並打印出來)

簡單瞭解遞迴1.什麼是遞迴???程式設計程式呼叫自身的程式設計技巧稱為遞迴( recursion)遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接 或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的 規模較小的問

逆波蘭表示式

問題描述 逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表示式的值,其

歸--練習6--noi1755數列

ace ac代碼 std 題目 ++ pen names tdi problem 遞歸--練習6--noi1755菲波那契數列 一、心得 二、題目 1755:菲波那契數列 總時間限制: 1000ms 內存限制: 65536kB描述菲波那契數列是指這樣的數列: 數列的

推-練習1--noi1760 數列(2)

tex 時間 正整數 itl n) col turn page def 遞推-練習1--noi1760 菲波那契數列(2) 一、心得 二、題目 1760:菲波那契數列(2) 總時間限制: 1000ms 內存限制: 65536kB描述菲波那契數列是指這樣的數列: 數列

劍指Offer04斐數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 時間限制:1秒;空間限制:32768K 解題思路 首先看到題目的第一想法就是遞迴,程式碼如下: # -*- coding:utf-8 -*- c

推演算法求斐數列(Fibonacci數列

一、遞迴演算法 import java.util.Scanner; //Fibonacci數列:1,1,2,3,5,8,... //求該數列第n個數的值。 //數列滿足遞迴公式:F1=1,F2+=1,Fn=Fn-1 + Fn-2 public class Fibonacci { pub