帮忙看看这二行代码会出什么结果?(100分)

  • 主题发起人 主题发起人 sunshine1750
  • 开始时间 开始时间
S

sunshine1750

Unregistered / Unconfirmed
GUEST, unregistred user!
function Dg(A: integer):integer;
begin
{if A = 0 then
Result := 0;
if A = 1 then
Result := 1;}
if A >= 2 then
Result := Dg(A - 1) + Dg(A - 2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := IntToStr(Dg(4));
end;

结果为什么会是3?好象那二句注释不起作用?
 
function Dg(A: integer):integer;
begin
if A = 0 then
begin
Result := 0;
Exit;
end;
if A = 1 then
begin
Result := 1;Exit;
end;
if A >= 2 then
Result := Dg(A - 1) + Dg(A - 2);
end;
 
function Dg(A: integer):integer;
begin
//if A = 0 then
begin
Result := 0;
Exit;
end;
//if A = 1 then
begin
Result := 1;Exit;
end;
if A >= 2 then
Result := Dg(A - 1) + Dg(A - 2);
end;
即使注释掉这二句,也可得到正确结果,为什么呢?
好象编译器内置了一样
 
是递归调用,没有设置A的退出值,内存不溢出,不死循环已算好了,你还要求有正确答案吗?
 
实际上,3是偶然得出的
您开始没加{}吧?
 
这是个巧合.
Delphi的函数的第一个参数是放在EAX寄存器里的,函数的返回值也是通过EAX返回的,所以空函数的返回值就是第一个参数的值.这里0和1是碰巧了而已.
你可以编下面的函数试试:
function f(a: Integer): Integer;
begin
end;
 
空函数的返回值就是第一个参数的值
Right
 
to LeeChange
如果说是巧合,代入Dg(4) = 3;代入Dg(5) = 5;
Dg(6) = 8
这样可说不通了。
to superman
"是递归调用,没有设置A的退出值,内存不溢出,不死循环已算好了,
你还要求有正确答案吗?"你说得有理,但结果与我们想象的不一样,你试试吧
 
leechang說的是你這個函數巧合。因為剛好dg(0)=0,dg(1)=1,所以函數就剛巧對了
所以返回值就是對的呀。
要不你把這個數列從dg(0)=1,dg(1)=1開始算。與dg(0)=0,dg(1)=1的結果應該是一樣的
 
明白了,dg(0)和dg(1)在这里相当于空函数,返回值为0和1
真是碰巧了
 
to lichdr
这句可不对了:)
"要不你把這個數列從dg(0)=1,dg(1)=1開始算。
與dg(0)=0,dg(1)=1的結果應該是一樣的"
 
多人接受答案了。
 
//delphi的函数的用处
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
function test: integer;
begin
inc(result);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:=1 to 100do
memo1.Lines.Add(inttostr(test))
end;

end.


object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 296
Top = 40
Width = 201
Height = 361
Lines.Strings = (
'Memo1')
TabOrder = 0
end
object Button1: TButton
Left = 160
Top = 184
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
end
 
不是巧合
 
后退
顶部