东人EP的内陆空间!
posts - 77, comments - 54, trackbacks - 0, articles - 0
IT博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
关于递归(recursion)的理解实例。
Posted on 2006-06-07 10:25
东人EP
阅读(303)
评论(0)
编辑
收藏
引用
所属分类:
.NET
1
/**/
/*
2
递归(recursion)
3
递归是常用的一种解决问题的方法,即把问题逐渐简化。
4
递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将直接或间接地调用自身的方法。
5
利用递归可以用简单程序解决复杂的问题。
6
我们先来看看一个用递归求阶乘的例子,如下所示。
7
*/
8
public
class
recursion
9
{
10
static
long
function(
int
n)
11
{
12
if
(n
==
1
)
13
{
14
return
1
;
15
}
16
else
17
{
18
return
n
*
function(n
-
1
);
19
}
20
}
21
22
public
static
void
main(String[] args)
23
{
24
int
n
=
10
;
25
System.out.println(n
+
"
!=
"
+
function(n));
26
}
27
}
28
/**/
/*
29
程序的输出结果为:
30
10!=3628800
31
递归的结构主要包括两部分:
32
1.定义递归头:任何一个递归方法都必须有一个递归头,也就是递归终止的条件。
33
即要解决的问题被简化到足够简单时,将可以直接获得问题的答案,而不必再调用自身。
34
例如上例中求1!可以直接得到1,就是递归头。
35
2.定义如何从同性质的简化问题求得当前问题。
36
问题的解答依赖于一个同性质问题的解答,而解答这个同性质的问题就是用不同的参数来调用递归方法自身。
37
例如上例中求n!这个问题,被划分为求(n-1)!和(n-1)!*n两个步骤。
38
依次类推求(b-1)!可以继续划分。。。。。
39
*/
40
/**/
/*
41
下面我们利用递归来求解8个皇后问题。
42
8个皇后问题说得是:在国际象棋的棋盘上,放置8个皇后,如何放才能使得这8个皇后无论横着看,竖着看,斜着看都不在同一条直线上。
43
如图所示是一种可能的摆放情况:其中放置皇后的地方标记Q。
44
*/
45
//
Queen.Java
46
import
javax.swing.
*
;
47
public
class
Queens
48
{
49
int
[] a
=
new
int
[
8
];
50
int
[] b
=
new
int
[
15
];
51
int
[][] c
=
new
int
[
8
][
8
];
52
53
void
next(
int
i)
54
{
55
for
(
int
j
=
0
; j
<
8
; j
++
)
56
{
57
if
(a[j]
==
0
&&
b[i
+
j}
==
0
&&
c[i
-
j
+
7
]
==
0
)
58
{
59
a[j]
=
b[i
+
j]
=
c[i
-
j
+
7
]
=
1
;
60
Queen[i][j]
=
1
;
61
if
(i
<
7
)
62
{
63
next(i
+
1
);
64
}
65
else
66
{
67
String output
=
new
String();
68
for
(
int
m
=
0
; m
<
8
; m
++
)
69
{
70
for
(
int
n
=
0
; n
<
8
; n
++
)
71
output
+=
"
"
+
d[m][n]
+
"
"
;
72
output
+=
"
\n
"
;
73
}
74
//
每种可能的情况以0、1表示(1表示皇后)输出
75
JTextArea outputArea
=
new
JTextArea();
76
outputArea.setText(output);
77
JOptionPane.showMessageDialog(
null
, outputArea,
"
One Possible distribution
"
, JOptionPane.INFORMATION_MESSAGE);
78
}
79
a[j]
=
b[i
+
j]
=
c[i
-
j
+
7
]
=
Queen[i][j]
=
0
;
80
}
81
}
82
}
83
84
public
static
void
main(String args[])
85
{
86
Queens one
=
new
Queens();
87
one.next(
0
);
88
System.exit(
0
);
89
}
90
};
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © 东人EP
日历
<
2006年10月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(11)
给我留言
查看公开留言
查看私人留言
随笔分类
(77)
.NET(43)
Ajax(11)
Design Pattern(1)
Java(1)
JavaScript(5)
MapInfo(10)
NB(6)
随笔档案
(77)
2007年2月 (4)
2007年1月 (10)
2006年12月 (1)
2006年11月 (2)
2006年10月 (5)
2006年9月 (9)
2006年8月 (13)
2006年7月 (8)
2006年6月 (19)
2006年5月 (6)
搜索
最新评论
1. re: 我现在Netyi.net上的下载资料,上面的有许多不错的资料,有好多程序设计方面的!
评论内容较长,点击标题查看
--CALDWELLMarjorie
2. re: PetShop3.0学习---数据库关系图
牛XX 分这么细的表
--sf2009
3. re: 显示多行InfoTips
感谢分享你的成功!:)
--LiWeiJiang
4. re: 使用asp.net 2.0和SQL SERVER 2005构建多层应用
不荀了。www.yougoo.net.cn
--ded
5. re: 我现在Netyi.net上的下载资料,上面的有许多不错的资料,有好多程序设计方面的!
评论内容较长,点击标题查看
--dsfsd
阅读排行榜
1. 我现在Netyi.net上的下载资料,上面的有许多不错的资料,有好多程序设计方面的!(6662)
2. MapInfo MapXtreme 2005 WebGIS上实现简单鹰眼设计!(6619)
3. C#实现串口通信编程(3751)
4. ClickOnce 打包部署WinForm 应用程序(3110)
5. SQLHelper.cs(3009)
评论排行榜
1. 我现在Netyi.net上的下载资料,上面的有许多不错的资料,有好多程序设计方面的!(9)
2. 实现漂亮的XP效果!(8)
3. MapInfo MapXtreme 2005 WebGIS上实现简单鹰眼设计!(7)
4. 如何实现服务器端下页面动态添加JavaScript脚本 (4)
5. PetShop3.0学习---数据库关系图(3)