python算法之递归思想

#递归思想#基本原理:函数内部调用函数本身,注意:至少有一个终止条件#例1.斐波那契数列def fib(x):    if x==1 or x==2:        return 1    else:        return fib(x-1) + fib(x-2)def fibList(x):    fibList = []    for i in range(x):        fibList.append(fib(i+1))    return fibListprint(fibList(9))

#例2.n的阶乘(n*(n-1)*(n-2)*...2*1)def jiecheng(n):    if n==1:        return 1    else:        return n*jiecheng(n-1)print(jiecheng(4))

#例3.用递归实现二分查找def binarysearch(numList, x, low, high):    if low > high:        return None    mid = (low + high) // 2    if x == numList[mid]:        return mid    elif x > numList[mid]:        return binarysearch(numList, x, mid+1, high)    else:        return binarysearch(numList, x ,low, mid-1)numList = [1,2,4,5,6,8,12,24,32,44]print(binarysearch(numList, 8, 0, len(numList)-1))

原文地址:https://www.cnblogs.com/xhw19950606/p/12324066.html

时间: 2024-08-28 20:16:51

python算法之递归思想的相关文章

算法之递归思想

树的遍历的实现就是典型的递归思想. /* * description:树的遍历示例,递归 * 访问顺序: * 前序: 当前节点 - 左子树 - 右子树 * 中序: 左子树 - 当前节点 - 右子树 * 后序: 左子树 - 右子树 - 当前节点 * * writeby: nick * date: 2012-10-22 23:56 */ #include <iostream> using namespace std; struct node { int item; node *l, *r; nod

全排列算法的递归思想及实现

题意:给定1~n n个正整数,写出它们的所有排列顺序. 思路:根据高中的知识,我们知道不重复的条件下结果是n!个排列顺序,在程序中我们先看看如何用递归来实现. 例如数组{1,2,3}的全排列为123,132,213,231.312.321. 可以看出一点规律来,我们依次交换了第一个数字,分别从1到3,后面是剩下数字的全排列,这里就能看出应该使用递归来实现了. 算法:首先依次交换第一个数字和每一位数字,再递归调用,最后将交换后的数组复原,以进行下一次的交换. 我自己的疑惑:在最开始看到这个题目和解

【算法】递归思想

给定一个字符串(该字符串没有相同的字母),使用递归的方式打印出这个字符串所包含字母的所有组合方式 package test1; public class num { public static void main(String[] args) { char[] c= {'a','b','c','d'}; f(c,0); } /* c为待递归数组,先确定第一个字符,再确定第二个...b为所有已确定字符位的后一个字符位 */ static void f(char c[],int b) { if(b=

python - 算法基础 - 递归

递归在需要重复操作且操作范围呈规律性变化时可以很方便帮我们解决问题 递归的特点: 1.递归就是在函数中调用自身 2.在使用递归时,必须有一个明确的结束条件,成为递归出口 3.递归算法通常显的很简洁,但是效率较低,所以一般不提倡用递归算法设计程序 4.在递归调用的过程中,系统为每一层的返回点.局部变量等开辟了栈来存储,递归次数过多容易造成栈溢出等 使用递归的要求: 1.每次相对前一次复杂度(一般是操作范围)都有所减小(通常是减半) 2.相邻两次重复之间有密切关系,前一次要为后一次做准备(通常是前一

Python算法——递归思想

编程语言在构建程序时的基本操作有:内置数据类型操作.选择.循环.函数调用等,递归实际属于函数调用的一种特殊情况(函数调用自身),其数学基础是数学归纳法.递归在计算机程序设计中非常重要,是许多高级算法实现的基础 编写递归程序的几个要点: 1.终止条件:最简单情况(避免无限循环) 2.递归公式:相邻两次调用间的关系(递归算法核心) 3.忽略调用具体细节:假设所有调用都会达到终止条件(从思想上接受递归算法的关键) 4.效率:递归算法有时效率较低,可考虑其他更高效的实现方式(见问题5) 下面我们通过几个

Python算法:推导、递归和规约

Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心知识:Induction(推导).Recursion(递归)和Reduction(规约),这是原书的重点和难点部分 正如标题所示,本节主要介绍下面三部分内容: • Reduction means transforming one problem to another. We normally red

JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n).1945年由约翰·冯·诺伊曼首次提出.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行. 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用

python日记_递归

递归算法 1.递归的定义 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法. 递归常与分治思想同时使用,能产生许多高校的算法.递归常用来解决结构相似的问题.所谓结构相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决.具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法:第二部分与原问题相似,但比原问题的规模小,并且依赖第一部分的结果..实际上,递归是把一个不能或不好解决的大问题转化成一个或几个小问

数据结构与算法5: 递归(Recursion)

数据结构与算法5: 递归(Recursion) 写在前面 <软件随想录:程序员部落酋长Joel谈软件>一书中<学校只教java的危险性>一章提到,大学计算机系专业课有两个传统的知识点,但许多人从来都没搞懂过,那就是指针和递归.我也很遗憾没能早点熟练掌握这两个知识点.本节一些关键知识点和部分例子,都整理自教材或者网络,参考资料列在末尾.如果错误请纠正我. 思考列表: 1)什么程序具有递归解决的潜质? 2)递归还是非递归算法,怎么选择? 3)递归程序构造的一般模式 1.递归定义 首要引