今天开始碰到一些坎,一个以前都没越过的坎。或许说是自己内心的一种的恐惧。
从基本语法到实际应用的过渡,感觉很吃力。
下午效率很低,一直在这个节点纠结。
要想有所突破,这坎必须得迈。沉下心来,慢慢地去思考。一切都会好。
首先,一道递归的题让我纠结了很久,晚上终于把它解决。
1、递归函数的使用
先附上代码:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Alpha:Integer;
procedure Test2(var A:Integer);forward
//Test2被说明为前置过程
procedure Test1(var A:Integer);
begin
A:=A-1;
if A>0 then
Test2(A); //经前置说明,调用未执行的过程Test2
writeln(A);
end;
procedure Test2(var A:Integer); //经前置说明的Test2的执行部分
begin
A:=A div 2;
if A>0 then
Test1(A); //在Test2中调用已执行的过程Test1
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
Alpha:=15; //给Alpha赋初值
Test1(Alpha); //第一次调用Test1,递归开始
end.
输出结果为:
0
0
0
0
当时对这一结果一直不理解,想结果为什么不是一个0。
后来查阅了很多资料,终于弄明白了,也加深了对递归的理解。
先附上有用的资料来源:递归详解
从函数 Test1(15) ,经过判断语句,产生Test1(7),Test1(3),Test(1),这时Test1(15)的递归调用结束,输出结果0.此时