① python 字典是可迭代对象吗
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出着名的斐波纳契数列。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
② 什么是伪递归
是尾递归,不是伪递归~
尾递归 - Tail Recursion
一种算法, 用于计算机编程技术.
尾递归是针对传统的递归算法而言的, 传统的递归算法在很多时候被视为洪水猛兽. 它的名声狼籍, 好像永远和低效联系在一起.
尾递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量. 直接让被调用的函数返回时越过调用者, 返回到调用者的调用者去.
以下是具体实例:
线性递归:
long Rescuvie(long n) {
return(n == 1) ? 1 : n * Rescuvie(n - 1);
}
尾递归:
long TailRescuvie(long n, long a) {
return(n == 1) ? a : TailRescuvie(n - 1, a * n);
}
long TailRescuvie(long n) {//封装用的
return(n == 0) ? 1 : TailRescuvie(n, 1);
}
当n = 5时
对于线性递归, 他的递归过程如下:
Rescuvie(5)
{5 * Rescuvie(4)}
{5 * {4 * Rescuvie(3)}}
{5 * {4 * {3 * Rescuvie(2)}}}
{5 * {4 * {3 * {2 * Rescuvie(1)}}}}
{5 * {4 * {3 * {2 * 1}}}}
{5 * {4 * {3 * 2}}}
{5 * {4 * 6}}
{5 * 24}
120
对于尾递归, 他的递归过程如下:
TailRescuvie(5)
TailRescuvie(5, 1)
TailRescuvie(4, 5)
TailRescuvie(3, 20)
TailRescuvie(2, 60)
TailRescuvie(1, 120)
120
很容易看出, 普通的线性递归比尾递归更加消耗资源, 在实现上说, 每次重复的过程
调用都使得调用链条不断加长. 系统不得不使用栈进行数据保存和恢复.而尾递归就
不存在这样的问题, 因为他的状态完全由n和a保存.
③ python编程recursion
1、这是递归;
2、递归过程中,第一层运算时n=4,则n-1=3,这个时候temp=fact(n-1),也就是temp=fact(3)。但由于递归没有完成,这个时候会通过计算temp=fact(2),temp=fact(1)两层递归返回temp=fact(3)的值,也就是1*2*3=6.
3、就是说在递归过程内部最高算到fact(n-1)的值,递归结束时才返回n*fact(n-1)的值。
④ 编程里recursion什么意思,不要太繁琐,越简单越好(我说的是python里的)
指的是递归,就是函数A在函数体内调用函数A,如“计算正整数和零的阶乘”的一个函数:
def Factorial(number):
if number == 0:
return 1
else:
return number * Factorial(number-1)
⑤ 我不会英语可以学习编程吗
根据你自己的情况,可以适当选择是否再自学以下英文,如果考虑到以后的发展,建议还是多少学习以下英文知识,其实不难,一般编程只要求能够达到高中英语水平即可,编程肯定是需要有一些英语储备的
大概用到的英语如下,供参考
、计算机算法常用术语中英对照
Data Structures 基本数据结构
Dictionaries 字典
Priority Queues 堆
Graph Data Structures 图
Set Data Structures 集合
Kd-Trees 线段树
Numerical Problems 数值问题
Solving Linear Equations 线性方程组
Bandwidth Rection 带宽压缩
Matrix Multiplication 矩阵乘法
Determinants and Permanents 行列式
Constrained and Unconstrained Optimization 最值问题
Linear Programming 线性规划
Random Number Generation 随机数生成
Factoring and Primality Testing 因子分解/质数判定
Arbitrary Precision Arithmetic 高精度计算
Knapsack Problem 背包问题
Discrete Fourier Transform 离散Fourier变换
Combinatorial Problems 组合问题
Sorting 排序
Searching 查找
Median and Selection 中位数
Generating Permutations 排列生成
Generating Subsets 子集生成
Generating Partitions 划分生成
Generating Graphs 图的生成
Calendrical Calculations 日期
Job Scheling 工程安排
Satisfiability 可满足性
Graph Problems -- polynomial 图论-多项式算法
Connected Components 连通分支
Topological Sorting 拓扑排序
Minimum Spanning Tree 最小生成树
Shortest Path 最短路径
Transitive Closure and Rection 传递闭包
Matching 匹配
Eulerian Cycle / Chinese Postman Euler回路/中国邮路
Edge and Vertex Connectivity 割边/割点
Network Flow 网络流
Drawing Graphs Nicely 图的描绘
Drawing Trees 树的描绘
Planarity Detection and Embedding 平面性检测和嵌入
Graph Problems -- hard 图论-NP问题
Clique 最大团
Independent Set 独立集
Vertex Cover 点覆盖
Traveling Salesman Problem 旅行商问题
Hamiltonian Cycle Hamilton回路
Graph Partition 图的划分
Vertex Coloring 点染色
Edge Coloring 边染色
Graph Isomorphism 同构
Steiner Tree Steiner树
Feedback Edge/Vertex Set 最大无环子图
Computational Geometry 计算几何
Convex Hull 凸包
Triangulation 三角剖分
Voronoi Diagrams Voronoi图
Nearest Neighbor Search 最近点对查询
Range Search 范围查询
Point Location 位置查询
Intersection Detection 碰撞测试
Bin Packing 装箱问题
Medial-Axis Transformation 中轴变换
Polygon Partitioning 多边形分割
Simplifying Polygons 多边形化简
Shape Similarity 相似多边形
Motion Planning 运动规划
Maintaining Line Arrangements 平面分割
Minkowski Sum Minkowski和
Set and String Problems 集合与串的问题
Set Cover 集合覆盖
Set Packing 集合配置
String Matching 模式匹配
Approximate String Matching 模糊匹配
Text Compression 压缩
Cryptography 密码
Finite State Machine Minimization 有穷自动机简化
Longest Common Substring 最长公共子串
Shortest Common Superstring 最短公共父串
DP——Dynamic Programming——动态规划
recursion —— 递归
第二部分、编程词汇
A2A integration A2A整合
abstract 抽象的
abstract base class (ABC)抽象基类
abstract class 抽象类
abstraction 抽象、抽象物、抽象性
access 存取、访问
access level访问级别
access function 访问函数
account 账户
action 动作
activate 激活
active 活动的
actual parameter 实参
adapter 适配器
add-in 插件
address 地址
address space 地址空间
address-of operator 取地址操作符
ADL (argument-dependent lookup)
ADO(ActiveX Data Object)ActiveX数据对象
advanced
aggregation 聚合、聚集
algorithm 算法
alias 别名
align 排列、对齐
allocate 分配、配置
allocator分配器、配置器
angle bracket 尖括号
annotation 注解、评注
API (Application Programming Interface) 应用(程序)编程接口
app domain (application domain)应用域
application 应用、应用程序
application framework 应用程序框架
appearance 外观
append 附加
architecture 架构、体系结构
archive file 归档文件、存档文件
argument引数(传给函式的值)。参见parameter
array 数组
arrow operator 箭头操作符
ASP(Active Server Page)活动服务器页面
http://ASP.NET worker process http://ASP.NET工作者进程
assembly 装配件、配件
assembly language 汇编语言
assembly manifest 装配件清单
assert(ion) 断言
assign 赋值
assignment 赋值、分配
assignment operator 赋值操作符
associated 相关的、相关联的
associative container 关联式容器(对应sequential container)
asynchronous 异步的
atomic 原子的
atomic operation 原子操作
attribute 特性、属性
authentication service 验证服务
authorization 授权
audio 音频
A.I. 人工智能
B2B integration B2B整合、B2B集成(business-to-business integration)
background 背景、后台(进程)
backward compatible 向后兼容、向下兼容
backup 备份
backup device备份设备
backup file 备份文件
bandwidth 带宽
base class 基类
base type 基类型
batch 批处理
⑥ precursion意思是
是precaution吧?意思是:小心,警惕
⑦ C语言中所有的代码及其代表的意思,有谁知道
这个问题问的太。。。。了,给你找了个操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更奇怪的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符说明举例
算术运算符
+ 加 x=y+z;
- 减 x=y-z;
* 乘 x=y*z;
/ 除 x=y/z;
赋值运算符
= 赋值 x=10;
+= 赋值与和 x+=10;(等于x=x+10;)
-= 赋值与减 x-=10;
*= 赋值与乘 x*=10;
\= 赋值与除 x\=10;
&= 赋值位与 x&=0x02;
|= 赋值位或 x|=0x02;
逻辑操作符
&& 逻辑与 if(x && 0xFF) {...}
|| 逻辑或 if(x || 0xFF) {...}
等式操作符
== 等于 if(x == 10) {...}
!= 不等于 if(x != 10) {...}
< 小于 if(x < 10) {...}
> 大于 if(x > 10) {...}
<= 小于或等于 if(x <= 10) {...}
>= 大于或等于 if(x >= 10) {...}
一元操作符
* 间接操作符 int x=*y;
& 地址操作符 int* x=&y;
~ 位非 x &=~0x02;
! 逻辑非 if(!valid) {...}
++ 递增操作符 x++(等于x=x+1;)
-- 递减操作符 x--;
类和结构操作符
:: 范围解析 MyClass :: SomeFunction();
-> 间接成员 MyClass-> SomeFunction();
· 直接成员 MyClass . SomeFunction();
可以看出,这个清单长了些,没法一下子记住。使用C++时,你会慢慢熟悉这些操作符的。必须指出,递增操作符既可用作前递增(++x),也可用作后递增(x++)。前递增操作符告诉编译器先递增再使用变量,而后递增操作符则让编译器先使用变量值再递增。例如下列代码:
int x = 10;
cout << "x = " << x++ << end1;
cout << "x = " << x << end1;
cout << "x = " x << end1;
cout << "x = " << ++x << end1;
输出结果如下:
x=10
x=11
x=12
x=12
递减操作符也是这样,这里不想将这些内容讲得太深,但读者可以耐心阅读下去,正如彭兹对奥古斯特所说,“奥古,耐心点,罗马不是一天建成的”。说明 在C++中操作符可以过载(overload)。编程人员可以通过过载标准操作符让它在特定类中进行特定运行。例如,可以在一个类中过载递增操作符,让它将变量递增10而不是递增1。操作符过载是个高级C++技术,本书不准备详细介绍。你也许会发现,有些操作符使用了相同的符号。符号的意义随情境的不同而不同。例如,星号(*)可以作为乘号、声明指针或取消指针引用。这初看起来有点乱,事实上,C++编程老手有时也觉得有点乱。多实践,你会慢慢适应的。本书有许多例子介绍这些操作符。读者不必死记每个操作符的作用,而可以在学习中通过程序和码段去理解其作用。 C++中的函数
函数是与主程序分开的码段。这些码段在程序中需要进行特定动作时调用(执行)。例如,函数可能取两个值并对其进行复杂的数学运算。然后返回结果,函数可能取一个字串进行分析,然后返回分析字串的一部分。新术语 函数(function)是与主程序分开的码段,进行预定的一个服务。函数是各种编程语言的重要部分,C++也不例外。最简单的函数不带参数,返回void(表示不返回任何东西),其它函数可能带一个或几个参数并可能返回一个值。函数名规则与变量名相同。图1.5显示了函数的构成部分。新术语 参数(parameter)是传递给函数的值,用于改变操作或指示操作程度。
返回类型 函数名 参数表
↓ ↓ ↓
int SomeFunction(int x, int y){
函数体→int z = (x * y); return z; ↑返回语句
}
图1.5函数的构成部分使用函数前,要先进行声明。函数声明或原型(prototype)告诉编译器函数所取的参数个数、每个参数的数据类型和函数返回值的数据类型。清单1.4列示了这个概念。新术语 原型(prototype)是函数外观的声明或其定义的说明。
清单1.4Muttiply.cpp
1: #include <iostream.h>
2: #include <conio.h>
3: #pragma hdrstop
4:
5: int multiply(int,int)
6: void showResult(int);
7:
8:int main(int argc,char **argv);
9:{
10: int x,y,result;
11: cout << end1 << "Enter the first value:";
12: cin >> x;
13: cout << "Enter the second value: ";
14: cin >> y;
15: result=multiply(x,y);
16: showResult(result);
17: cout << end1 << end1 << "Press any key to continue...";
18: getch();
19: return 0
20: }
21:
22: int multiply(int x,int y)
23: {
24:return x * y;
25: }
26:
27: void showResult(int res)
28: {
29:cout << "The result is: " << res <<end1;
30: }
这个程序的11到14行用标准输入流cin向用户取两个数字,第15行调用multiply()函数将两个数相乘,第16行调用showResult()函数显示相乘的结果。注意主程序前面第5和第6行multiply()和showResult()函数的原型声明。原型中只列出了返回类型、函数名和函数参数的数据类型。这是函数声明的最基本要求。函数原型中还可以包含用于建档函数功能的变量名。例如,multiply()函数的函数声明可以写成如下:int multiply(int firstNumber,int secondNumber);这里函数multiply()的作用很明显,但代码既可通过说明也可通过代码本身建档。注意清单1.4中函数multiply()的定义(22到25行)在主函数定义码段(8到20行)之外。函数定义中包含实际的函数体。这里的函数体是最基本的,因为函数只是将函数的两个参数相乘并返回结果。清单1.4中函数multiply()可以用多种方法调用,可以传递变量、直接数或其它函数调用的结果:
result = multiply(2,5);//passing literal values
result = multiply(x,y); //passing variables
showResult(multiply(x,y));
//return value used as a
//parameter for another function
multiply(x,y);//return value ignored
注意 最后一例中没有使用返回值。本例中调用函数multiply()而不用返回值没什么道理,但C++编程中经常忽略返回值。有许多函数是先进行特定动作再返回一个数值,表示函数调用的状态。有时返回值与程序无关,可以忽略不计。如果将返回值忽略,则只是放弃这个值,而不会有别的危害。例如,前面的样本程序中忽略了getch()函数的返回值(返回所按键的ASCII值)。函数可以调用其它函数,甚至可以调用自己,这种调用称为递归(recursion)。这在C++编程中是个较复杂的问题,这里先不介绍。新术语 递归(recursion)就是函数调用自己的过程。
⑧ 求问maximum recursion depth exceeded怎么解决
报错提示:超过最大递归深度。
解决办法:可以修改递归深度的值,让它变大大一点。
(8)编程recursion什么意思扩展阅读:
递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。