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

斐波那契数列:

  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_other(num):    result = 0    if num > 1 :        result += fbis_other(num - 2) + fbis_other(num -1)    else:        result += num    return result

#这个方法使用的函数递归
时间: 2024-10-09 15:25:28

通过“”斐波那契数列“”学习函数递归的相关文章

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

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

----斐波那契数列---eval函数----类递归思想 栈 进出 思想

------------ 斐波那契 数列 --------------- [1,1,2,3,5,8,13,21,34,...] 1 列表方法实现 # l=[1,1] # # # while len(l)<=20: # # l.append(l[-1]+l[-2]) # # print(l) # # while len(l)!=4: # l.append(l[-1]+l[-2]) # print(l) # 2 迭代实现 # n=10 # # n1 = 1 # n2 = 1 # n3 = 1 # #

补充 ----斐波那契数列---eval函数

------------ 斐波那契 数列 --------------- [1,1,2,3,5,8,13,21,34,...] 1 列表方法实现 # l=[1,1]## # while len(l)<=20:# # l.append(l[-1]+l[-2])# # print(l)## while len(l)!=4:# l.append(l[-1]+l[-2])# print(l)# 2 迭代实现 # n=10## n1 = 1# n2 = 1# n3 = 1## if n<=2:# re=

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

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

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

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

斐波那契数列(fabnacci)j递归

<?php//$all为1则返回fabnacci数列所有数组元素function fabnacci($n, $all = 1){ static $fabn = []; if($n < 2){ $fabn[$n] = 1; }else{ if(empty($fabn[$n])){ $fabn[$n] = fabnacci($n - 1, 0) + fabnacci($n - 2, 0); } } if($all == 1){ return $fabn; }else{ return $fabn[$

斐波那契数列的非递归

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

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <