深度搜索
栈与递归;例0-1:输入一个正整数n,求n的阶乘
var n : integer;
function fac(n:integer):longint;
begin
if n = 0 then
fac := 1
else
fac := n * fac(n-1);
end;
begin
readln(n);
writeln(fac(n));
end.
;要理解递归,首先应了解一种数据结构:堆栈(简称栈)的概念。
;栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素称作进栈、入栈或压栈;从一个栈删除元素又称作出栈或退栈。 ;栈指针top;栈指针top;栈指针top;栈指针top;栈指针top;栈指针top;例0-2:输入n个整数,并逆序输出(栈实现)。
输入样例:
3
1 2 3
输出样例:
3 2 1
;const maxn = 20;
var
stack : array[1..maxn] of integer;
top : integer;
n, i, x : integer;
procedure init;
begin
top := 0;
end;
function isfull:boolean;
begin
if top = n + 1 then
isfull := true
else
isfull := false;
end;;
function isempty:boolean;
begin
if top = 0 then
isempty := true
else
isempty := false;
end;
procedure push(x:integer);
begin
top := top + 1;
if isfull = true then
writeln(Stack Full)
else
stack[top] := x;
end;;
function gettop:integer;
begin
gettop := stack[top];
end;
procedure pop;
begin
if isempty = true then
writeln(Stack Empty)
else
top := top - 1;
end;;
begin
readln(n);
for i := 1 to n do
begin
read(x);
push(x);
end;
while isempty true do
begin
write(gettop, );
pop;
end;
end.;编译器处理函数调用时,就是使用栈来保存数据的。当主调函数调用另一个函数时,编译器将主调函数的所有实参和返回地址压入到栈中,栈指针将移到合适的位置来容纳这些数据。
;当进行被调函数时,编译器将栈中的实参数据弹出,赋值给函数的形参。在被调用函数执行期间,还可利用栈来保存函数执行时的局部变量。当被调用函数准备返回时,系统将弹出栈中所有当前函数压入栈中的值,这时,栈指针移动到被调用函数刚开始执行时的位置。接着被调用函数返回,系统从栈中弹出返回地址,主调函数就可以继续执行了。
;回到阶乘的递归算法上来。假设要计算5的阶乘,通过前面设计的递归程序执行过程如下。
首先,在主函数中调用fact(5)函数,将返回地址、参数、局部变量压入堆栈。
;在fact()函数中,判断n的值若不为0,则递归调用fact(4),这时将函数的返回地址和参数压入堆栈。
;程序继续递归调用时,将fact(3)、fact(2)、fact(1)逐步压入堆栈
;当调用fact(0)时,达到阶乘递归算法的结束条件,这时结束fact(0)函数调用,从堆栈中弹出该层的相关数据,并返回函数的结果1。这时栈顶中保存的将是fact(1)中的相关数据
;当递归函数逐层返回时,栈中压入的数据将逐步弹出,当弹出fact(4)后的栈结果如图所示
;当函数fact(5)返回时得到5的阶乘等于120,同时从栈中弹出调用函数时的数据,完成整个递归调用,并返回主函数输出执行。
;搜索;一、引例;一、引例;方法一、穷举法
寻找问题解的一种可靠的方法是首先列出所有可能候选解,然后依次检查每一个,在检查完所有或部分候选解后,即可找到所需要的解。理论上,当候选解数
您可能关注的文档
最近下载
- 附件: 黑龙江省年“村村大学生计划(培养)” 招 生 简 章 “村村 .doc VIP
- 往年江苏省教师招聘考试教育学心理学真题及答案.docx VIP
- 国资集团考试试题及答案.docx VIP
- 部编版语文一年级下册阅读11《浪花》课件PPT.pptx VIP
- 2018海湾GST-QKP04、GST-QKP04 2气体灭火控制器说明书.docx
- 浙江省杭州市西湖区之江中学2024-2025学年高二上学期期末数学试题(解析版).docx VIP
- 人教版五年级上册数学期末测试卷及参考答案ab卷.docx VIP
- [中央]2025年中国建设银行建信养老金管理有限责任公司校园招聘20人笔试历年参考题库频考点试题附带答案详解.docx
- 海南省公务员考试模拟试题库《行测》部分及参考答案.docx VIP
- BS EN 14540-2014 国外国际规范.pdf VIP
原创力文档

文档评论(0)