美文网首页
常见递归问题

常见递归问题

作者: 马小跳_ | 来源:发表于2018-02-20 22:22 被阅读7次

1.小鲤鱼

def xiaoliyu(n):
    if n == 0:
        print("我的小鲤鱼", end="")
    else:
        print("抱着", end="")
        xiaoliyu(n-1)
        print("的我", end="")
xiaoliyu(5)  # 抱着抱着抱着抱着抱着我的小鲤鱼的我的我的我的我的我

2.汉诺塔

问题分解:

n个盘子时:
    1.把n-1个圆盘从A经过C移动到B
    2.把第n个圆盘从A移动到C
    3.把n-1个小圆盘从B经过A移动到C
def hanoi(n, A, B, C):
   if n > 0:
       hanoi(n-1, A, C, B)
       print("%s -> %s"%(A, C))
       hanoi(n-1, B, A, C)
hanoi(3, 'A', 'B', 'C')

3.斐波那契数列

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34....

这个数列从第3项开始,每一项都等于前两项之和。

def fibo(n):
    if n <= 2:
        return n
    else:
        return fibo(n-1)+fibo(n-2)
print(fibo(5))

4.二分查找

从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

def binarySearch(li, val, low, high):
    low = 0
    high = len(li) - 1
    while low <= high:
        mid = (low+high) // 2
        if li[mid] > val:
            high = mid - 1
        elif li[mid] < val:
            low = mid + 1
        else:
            return mid
    else:
        return -1

递归版本的二分查找

def binarySearch_rec(li, val, low, high):
    while low <= high:
        mid = (low+high) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            return binarySearch(li, val, low, mid-1)
        else:
            return binarySearch(li, val, mid+1, high)

相关文章

  • 常见递归问题

    1.小鲤鱼 2.汉诺塔 问题分解: 3.斐波那契数列 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5,...

  • JAVA编程基础之递归结构

    递归结构 递归是一种常见的解决问题的方法,即把问题逐渐简单化。 递归的基本思想就是 自己调用自己 ”,一个使用递归...

  • Java--递归-1

      递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法...

  • 【算法】-再谈递归

    递归recursive问题作为算法的常见问题,今天来聊一聊。 好多人把递归和迭代傻傻分不清楚,其实,当你理解了其中...

  • 链表反转

    反转类型问题是面试中的常见问题。如反转字符串,反转链表等,今天给出利用递归和非递归方法解决反转链表问题的两个解决思...

  • 上台阶问题-递归和动态规划

    上台阶是一个常见的问题,解法主要有递归和利用动态规划,这篇文章简单介绍下递归解法和动态规划,以及对应的代码。递归解...

  • Python语法-函数进阶篇

    主要是对函数的一些补充内容,包括递归函数,常见内置函数和常见的高阶函数的使用 递归函数 和所有语言一样,递归函数说...

  • 递归、递归的常见例子

    算法是程序设计的灵魂。为了保持大脑不生锈,一般一两天就刷一刷算法题。这里简单总结下递归、及递归的常见问题。也当是小...

  • Python如何递归删除空文件夹

    Python如何递归删除空文件夹 Python如何递归删除空文件夹,这个问题很常见。但大多数人的解决办法都是自己实...

  • 链表翻转的图文讲解(递归与迭代两种实现)

    链表的翻转是程序员面试中出现频度最高的问题之一,常见的解决方法分为递归和迭代两种。 1、非递归(迭代)方式 迭代的...

网友评论

      本文标题:常见递归问题

      本文链接:https://www.haomeiwen.com/subject/jdkvtftx.html