题目九:斐波那契数列 怼烎@ 2021-11-02 01:02 274阅读 0赞 / // 13.题目九:斐波那契数列 /\*写一个函数,输入N,求斐波那契(Fibonacci)数列的第N项. F(n) = \{0 n == 0; 1 n == 1; F(n -1) + F(n -2) n > 1; \} \*/ static int s_RunTime = 0; void CalcFbio(int iNum) { printf("N(%d) --> F(%d) + F(%d)\n", iNum, iNum - 1, iNum - 2); s_RunTime++; } int Fbio_1(int iNum) { if (iNum <= 1) { return iNum; } CalcFbio(iNum); return Fbio_1(iNum - 1) + Fbio_1(iNum - 2); } // 优化版 --> 去掉重复计算项 //时间复杂度O(n) int Fbio_2(int iNum, vector<int>& vect) { // 1.循环退出条件 if (iNum <= 1) { return iNum; } // 如果该项F(n)已经计算过,直接返回结果 if (vect[iNum - 1] > 0) { return vect[iNum - 1]; } // 3.存储对应项结果 vect[iNum - 1] = Fbio_2(iNum - 1, vect) + Fbio_2(iNum - 2, vect); CalcFbio(iNum); return vect[iNum - 1]; } // 非递归解法 时间复杂度O(n) int Fbio_3(int iNum) { int iRes = 0; if (iNum <= 1) { return 1; } int iSum = 0; int iOne = 1; int iTwo = 0; for (int i = 2; i <= iNum; i++) { iSum = iOne + iTwo; iTwo = iOne; iOne = iSum; printf("Fbio: N = %d, Value = %d\n", i, iSum); } return iSum; } // // 类似题目:一只青蛙一次可以跳上一级台阶,也可以跳上2级,求该青蛙跳上一个N级的台阶总共有多少种跳法? int JumpStep_1(int iNum) { if (iNum <= 2) { return iNum; } CalcFbio(iNum); return JumpStep_1(iNum - 1) + JumpStep_1(iNum - 2); } int JumpStep_2(int iNum) { #if 0 //int iSumStep = 0; int iStep1 = 1; int iStep2 = 2; while (iNum-- > 1) { iStep2 += iStep1; iStep1 = iStep2 - iStep1; printf("JumpStep: N = %d, Value = %d\n", iNum, iStep1); } return iStep1; #else #endif if (iNum <= 2) { return iNum; } int iRes = 0; int iOne = 1; int iTwo = 2; for (int i = 3; i <= iNum; i++) { iRes = iOne + iTwo; iOne = iTwo; iTwo = iRes; printf("JumpStep: N = %d, Value = %d\n", i, iRes); } return iRes; } void FiboTestFunc() { cout << "\n\n --------------- FiboTestFunc Start -------------->" << endl; //for (int i = 0; i < 20; i++) //{ // printf("斐波那契数列: N = %d, Value = %d\n", i, Fbio(i)); //} int iNum = 10; printf("斐波那契数列: N = %d, Value = %d\n", iNum, Fbio_1(iNum)); printf("方法一运行次数: %d\n", s_RunTime); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; vector<int> vect(iNum, 0); s_RunTime = 0; printf("斐波那契数列: N = %d, Value = %d\n", iNum, Fbio_2(iNum, vect)); printf("方法二运行次数: %d\n", s_RunTime); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; printf("斐波那契数列: N = %d, Value = %d\n", iNum, Fbio_3(iNum)); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; s_RunTime = 0; printf("青蛙跳台阶: N = %d, Value = %d\n", iNum, JumpStep_1(iNum)); printf("方法一运行次数: %d\n", s_RunTime); cout << "========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << endl; printf("青蛙跳台阶: N = %d, Value = %d\n", iNum, JumpStep_2(iNum)); cout << "\n\n --------------- FiboTestFunc End -------------->" << endl; } 转载于:https://www.cnblogs.com/yzdai/p/11258630.html
相关 斐波那契数列 斐波那契数,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2, Love The Way You Lie/ 2022年11月19日 04:15/ 0 赞/ 235 阅读
相关 斐波那契数列 \\题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路 1. 递归(函数栈调用消耗 ゝ一纸荒年。/ 2022年10月29日 06:26/ 0 赞/ 35 阅读
相关 斐波那契数列 // 斐波那契数列.cpp : 定义控制台应用程序的入口点。 // \include "stdafx.h" \include<iostream> usin 谁践踏了优雅/ 2022年08月23日 14:45/ 0 赞/ 63 阅读
相关 斐波那契数列 关于斐波那契数列的解法,本人找到了一种比较简单的方法,结果是正确的,不知道各位有没有另外更好的解法,一起探讨探讨。 import java.util.; pu ╰+攻爆jí腚メ/ 2022年08月01日 12:15/ 0 赞/ 353 阅读
相关 斐波那契数列 定义:斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列从第三项开始,每一项都等于前两项之和。 矫情吗;*/ 2022年07月13日 04:49/ 0 赞/ 307 阅读
相关 斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597, 冷不防/ 2022年07月13日 03:19/ 0 赞/ 327 阅读
相关 斐波那契数列 class FibIter(object): def __init__(self, lenth): self.lent 一时失言乱红尘/ 2022年05月27日 13:51/ 0 赞/ 324 阅读
相关 斐波那契数列 include<iostream> using namespace std; int fibonacci1(int t) { if(t 古城微笑少年丶/ 2022年05月09日 08:58/ 0 赞/ 290 阅读
相关 斐波那契数列 ![1234096-20171112230708606-1911525192.png][] 转载于:https://www.cnblogs.com/ostrich-sugar た 入场券/ 2022年01月06日 23:41/ 0 赞/ 351 阅读
相关 题目九:斐波那契数列 / // 13.题目九:斐波那契数列 /\写一个函数,输入N,求斐波那契(Fibonacci)数列的第N项. F(n) = \{0 n == 0; 怼烎@/ 2021年11月02日 01:02/ 0 赞/ 275 阅读
还没有评论,来说两句吧...