最近在写制作科赫雪花的例程时,需要用到递归的思想。然而自己看了很久,依旧看不出什么头绪。于是上网搜索了很多资料阅读,稍微理解了递归的思想了,但是感觉依旧生涩难懂,特别是需要自己写递归的代码的时候,更是没有头绪了。为了加深自己对递归的理解,就着手自己写一个阶乘的程序。遇到了很多问题。在这里总结一下。
什么是递归?
知乎有个回答,让人印象深刻(改版):
天下有奇族人姓计,长生不老。一日其孙问其父:吾之18代祖名何?
其父不明,父问其父
其父不明,父问其父
其父不明,父问其父
其父不明,父问其父
…
晌后,其18代祖回其子:妮泰美
然其回其子:计妮泰美
然其回其子:计妮泰美
然其回其子:计妮泰美
然其回其子:计妮泰美
……
终,计姓末代孙知其18代祖名“计妮泰美”
此奶,递归。
虽是抖机灵的段子,但其深刻写出了递归递进与归来的思想。一层一层递进,直到最后一个知道的人(基例)得到答案,然后再一层一层传出来(经过规律处理),这就是递归。
在慕课网的回答中,他总结递归首先要弄清楚两点:
递归的出口(终止递归的条件,即基例)
递归的表达式(规律)
这个思想对编写出递归的程序很重要。
下面是刚刚写阶乘递归时的错误代码:
错误示例1:
#jiecheng
#f (n)= n!
def f(n):
if n==1:
f(n) = 1
else:
f(n) = n*f(n-1)
def main():
print(f(5))
main()
运行结果:
错误总结:语法错误。函数理解的错误,误认为代码的编写与数学中写公式一样。
错误示例2: