如何将递归改为不用递归就可以实现,最好有举例代码(100分)

  • 主题发起人 主题发起人 WilliamGui
  • 开始时间 开始时间
W

WilliamGui

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将递归改为不用递归就可以实现,最好有举例代码
 
举个简单的例子:
function GetRootNode1(Node: TTreeNode): TTreeNode;
begin
if Node.Parent = nil then
Result := Node
else
Result := GetRootNode1(Node.Parent);
end;

function GetRootNode2(Node: TTreeNode): TTreeNode;
begin
Result := Node;
while Result.Parent <> nil do
Result := Result.Parent;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if TreeView1.Selected = nil then
Exit;
ShowMessage(GetRootNode1(TreeView1.Selected).Text);
ShowMessage(GetRootNode2(TreeView1.Selected).Text);
end;

 
一般是用栈来辅助实现。
看看二叉数的非递归算法就知道了。
 
为何?岂有此理?
 
在自定义函数中调用该自定义函数
function aaa():boolean;
begin
//条件
aaa();
end;
 
例子:计算n!

//递归算法
代码:
function Factorial_Recursive(n: integer): integer;
begin
  if n = 0 then
    result := 1
  else
    result := n * Factorial_Recursive(n - 1)
end;

//不用递归,用循环

代码:
funtion Factorial_Loop(n: integer);
var 
  i, product: integer;
begin
  product := 1;
  for i := 1 to n do
    product := product * i;
  result := product;
end;

//以上假设n>=0
 
再学习一下数据结构,
 
学算法不学数据结构是成不了程序员的,
程序员基本功:数据结构,软件工程,面象对象编程,
 
如何把Table中的数据以树型结构显示,但不使用递归
 
递归代码都可非递归化,数据结构中有讲,无非就是保留调用状态,时间太长忘了,再翻翻书就明白了。
 
我是在SQL Server端中写的,所以不能用递归,但我现在自已已很满意的解决了,谢谢大家
 
后退
顶部