如何把递归函数变成非递归的,一般是什么思路??
如何把递归函数变成非递归的,一般是什么思路??
例如
f(n)=n+1 if n=1 or i=2
f(n-1)*f(n-2)+1 if n=3,4,...
问题点数:100、回复次数:11Top
1 楼stephen_young()回复于 2006-03-20 00:40:46 得分 0
用for或while循环。Top
2 楼cutepig123()回复于 2006-03-20 01:10:20 得分 0
我当然知道用for或while循环了!我问的是怎么分析这个问题并且用恰当的方式实现Top
3 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-20 01:11:02 得分 10
用数组存储中间结果
a[0]=f(n-2);a[1]=f(n-1)
之后计算出f(n),
a[0]=a[1];a[1]=f(n);
这么循环Top
4 楼YufengShi(浪子)回复于 2006-03-20 01:17:33 得分 30
int f1=2;
int f2=3;
for(int i=3; i<=n; ++i)
{
fi=f1*f2+1;
f1=f2;
f2=fi;
}
非递归就是递推。
从可以计算的点,一直推算到结果。Top
5 楼cutepig123()回复于 2006-03-20 01:23:57 得分 0
用堆栈怎么实现呢?Top
6 楼cutepig123()回复于 2006-03-20 01:24:32 得分 0
谢谢YufengShi,用堆栈怎么实现呢?
Top
7 楼cutepig123()回复于 2006-03-20 01:27:34 得分 0
比如这一个
或者
f(m,n)=n+1 if m=0
f(m-1,n) if n=0
f(m-1,f(m,n-1)) if m!=0 and n!=0
Top
8 楼laiyiling(陌生人[MVP])回复于 2006-03-20 08:31:48 得分 30
http://www.programfan.com/club/showbbs.asp?id=7946Top
9 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2006-03-20 09:20:35 得分 30
一切递归都可以用堆栈来实现非递归,随便找本数据结构的书,一大片代码。Top
10 楼Sangel()回复于 2006-03-20 09:26:48 得分 0
同意楼上说的···
Top
11 楼sirguan(123)回复于 2006-03-20 09:42:59 得分 0
清华的蓝皮的数据结构上就有讲解Top




