• 递归该怎么写(一)


    递归定义

    递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。

    我们现在开始来举例子,然后总结如何写好递归程序。(这种针对可以找出数学表达式的递归程序,对于写不出数学表达式的或者不好找的会在之后的博客中补充)

    例子1: n的阶乘。

    我们先来写出数学表达式

    代码部分

    1 __author__ = "WSX"
    2 
    3 def f(n):
    4     if n == 1:
    5         return 1
    6     else:
    7         return f(n-1) * n
    8 
    9 print(f(3))

    例子 2: 斐波那契数列

    我们还是来写数学表达式,嘿嘿。

    相应代码:

    1 __author__ = "WSX"
    2 def fib(n):
    3     if n == 1:
    4         return 1
    5     if n == 2:
    6         return 1
    7     if n>2:
    8         return fib(n-2) + fib(n-1)
    9 print(fib(4))

    例子3 :求最大公约数

    老样子,先写数学表达式。是不是感觉没啥难度了(可以用数学表达出来的)

    return 就是等号 !!!

    代码:

    1 __author__ = "WSX"
    2 
    3 def gcb(a, b):
    4     if a%b == 0:
    5         return b
    6     else:
    7         return gcb(b, a%b)

    到了这里是不是对于这种类型的递归已经能十分简单的写出来了?  我们在看一个稍微高级一点点的例子

    例子4: 二分查找

    写表达式,你会想这个表达式怎么写??? 下面我们来看。

    代码:

     1 __author__ = "WSX"
     2 
     3 def s(L , left , right , target):
     4     mid = (left + right) // 2
     5     if target == L[mid]:
     6         return mid
     7     if left > right:
     8         return None
     9     if target > L[mid]:
    10         return s(L,mid+1 , right,target)
    11     else:
    12         return s(L, left, mid-1, target)
    13 L = [3,5,7,8,55,88]
    14 print(s(L, 0 ,len(L),88))

    我总结的经验是:

    确定需要递归的参数

    写出递归的表达式(一定找到出口) 就是结束的条件

    将表达式转化为代码(函数名 = 表达式左侧        函数内部 = 表达式右侧        return = 等号)

  • 相关阅读:
    WM_COMMAND 和 WM_NOTIFY 的区别
    C 游戏所要看的书
    Source Insight中文字体设置
    在 windows7 中使用 vs2003 时,“在文件中查找”导致无响应的问题
    解决VS2008 调试启动特别慢
    c++ 浅谈 new 的使用
    Access界面基础操作
    与孩子一起学编程12章
    YT工作日志-0911
    两种方式遍历二叉树--递归方式和非递归方式
  • 原文地址:https://www.cnblogs.com/WSX1994/p/10751446.html
Copyright © 2020-2023  润新知