递归的练习| 学习笔记

简介: 快速学习递归的练习

开发者学堂课程Python入门 2020年版递归的练习】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10339


递归的练习


内容介绍

一、#使用递归求n!

二、#使用递归求斐波那契数列的第n个数字


一、#使用递归求n!

使用递归求n!和求和差不都,就是从第一个数的阶乘开始乘到最后一个数的阶乘,n!=n*(n-1)!

def factorial(n):

return n * factorial(n - 1)

会有一个问题,从第一个阶乘开始一直乘,就停不下来,如果想要它停下来,

If n ==0:

Return 1

0=1 1=0x1!print(factorial(6)#6*factorial(5)===>6*5*factorial(4)==>6*5*4*3*2*1*1

运行结果:720

大家会发现循环也不算难,核心思想就是下一个数等于之前两个数的和,这个地方使用递归就更加简单。


二、#使用递归求斐波那契数列的第n个数字

#11235813213455144

def fibonacci(n):

if n==6:return 8

if n==7,return 13

return fibonacci(n-2) + fibonacci(n-1)

斐波那契里面第n个数等于第n-1个数加上n-2个数,

F(8)=f(6)+f(7)

如果f(6)f(7)都知道就可以计算出f(8)

8+13==>21

这样有个小问题,只能计算6以上,7以上的斐波那契数列,

def fibonacci(n):

if n==2:return 1

return fibonacci(n-2) + fibonacci(n-1)

F(8)=f(6)+f(7)

= f(4)+ f(5) + f(5) + f(6)

= f(2)+f(3)+ f(4)+f(3)+ f(4)+f(3)+ f(4)+f(5)

= f(0)+f(1)

没有第零个数,所以2就不应该拆了=1+1+f(1)+f(2)+f(3)+f(2)+f(1)+f(2)+f(3)+f(2)+f(1)+f(2)+f(3)+f(4)+f(3)

=1+1+1+1+f(3)+1+1+1+f(3)+1+1+1+f(3)+f(4)+f(3)

最终拆完的结果是211相加,

最后再加一个返回区间

def fibonacci(n):

if n==2 or n ==1:return 1

return fibonacci(n-2) + fibonacci(n-1)

print(Fibonacci(8))

运行结果:21

print(Fibonacci(9))

运行结果:44

相关文章
|
2天前
|
算法 Java Serverless
【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题
【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题
|
7月前
C 递归
C 递归。
21 2
|
9月前
递归
递归
35 0
|
9月前
糊里糊涂的递归和递归经典题(下)
糊里糊涂的递归和递归经典题(下)
|
9月前
|
算法 C语言
糊里糊涂的递归和递归经典题(上)
糊里糊涂的递归和递归经典题
|
10月前
认识了解递归的原理,学会递归的运用
认识了解递归的原理,学会递归的运用
|
10月前
|
存储 算法 C++
递归的应用
递归的应用
|
11月前
|
Java 数据安全/隐私保护 决策智能
字符串全排列(递归)
字符串全排列,递归的应用
115 0
|
算法
【学习笔记之我要C】函数递归
【学习笔记之我要C】函数递归
42 0
|
算法 程序员 C语言
递归|学习笔记
快速学习递归
68 0
递归|学习笔记