在解题时可能会遇到一些问题不是正常的回圈就可以解决的,可能需要用到前面的答案来运算,像是计算阶乘、费氏数列等等,就会使用到递回了!
把一件复杂的工作拆分成很多简单的小工作来处理,这个方法称为 Divide and Conquer approach 分治法。
递回就是根据这个概念形成的,把一个大问题拆成很多个中问题,再把这些中问题拆分为许多早小问题,这些小问题都用同样的 function 来解,用这个方式来解决大问题就称作递回 Recursion。
这种呼叫自己的动作,就被认为具有递回的性质,为了避免函式无止尽的呼叫自己,形成无穷回圈,所以需要有终止条件,来明确定义什麽时候该结束。
数学中的阶乘符号用 !
来代表,n! = 1 * 2 * ... * n
以数学方式表示 n 阶层的话如下图
可以看出 n! = n * (n - 1)!
,我们就可以用这个概念来写出递回的程序。
0! = 1
1! = 1
n! = n * (n - 1)!, n >= 1
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
呼叫的为 5! 所以可以拆分为 5 * 4! 再把 4! 拆分为 3!...依此列推,就可以运算出阶乘了
今天先介绍到阶乘,明天继续来介绍同样很有名的费氏数列,还有递回的一些限制,明天见
待续...
<<: 30天零负担轻松学会制作APP介面及设计【DAY 23】
>>: Day 17 - Remove Duplicates from Sorted List
Singleton Pattern: 单例模式是程序设计中常见的一种方法,其顾名思义,就是只有一个人...
Hi~今天要介绍什麽是区块链!会分成五个部分,分别是定义、起源、特性、优点、缺点! 定义 当你听到...
今天来做搜寻看板的部分,首先Layout我先简单的放一个EditText以及Button,点击But...
前言 SQL的查询语法今天到最後一部分? 要练习关联式资料库最重要的精髓! 就是查询出在不同资料表...
一分钟的思考,远胜於一个小时的谈话。 A minute of thought is greater ...