注册 登录
编程论坛 C++教室

求个递归算法

梦自在 发布于 2007-04-10 16:52, 1388 次点击
输出下面的数值:
1
2 2
3 3 3
. . . .
. . . .
. . . . .
n n n... n
求个递归算法???并说下上面的与倒着输出来的区别.
n n n... n
. . .
. . .
3 3 3
2 2
1
谢谢
16 回复
#2
I喜欢c2007-04-10 17:13
int f(int n)
{
int i;
if(!n) return;
for(i=n;i;i--)
cout<<n<<' ';
cout<<endl;
f(n-1);
}
#3
I喜欢c2007-04-10 17:16
int f(int n)
{
int i;
if(!n) return;
f(n-1);
for(i=n;i;i--)
cout<<n<<' ';
cout<<endl;
}
#4
梦自在2007-04-10 18:29
回复:(I喜欢c)int f(int n) { int i; if(!n)...

int f(int n)
{
int i;
if(!n) return;
for(i=n;i;i--)
cout<<n<<' ';
cout<<endl;
f(n-1);
}
这我知道的
但是int f(int n)
{
int i;
if(!n) return;
f(n-1);
for(i=n;i;i--)
cout<<n<<' ';
cout<<endl;
} 把d(n-1)放在前面怎么就是从122333 怎么输入呢.我看f(n-1)放在前面和后面是一样的啊
请指点!!!谢谢!!!

#5
aipb20072007-04-10 19:11
void display_up(int n){
if (n-- > 0){
display_up(n);
++n;
for (int i = 1;i <= n;++i)
cout << n << " ";
cout << endl;
}
return;
}
void display_down(int n){
if (n > 0){
for (int i = 1;i <= n;++i)
cout << n << " ";
cout << endl;
display_down(--n);
}
return;
}
#6
梦自在2007-04-10 19:41
回复:(aipb2007)void display_up(int n){ if (n...

我昏哒 .这算法都是一样的.
但请讲解下上面我问的点小问题好么???
谢谢

#7
aipb20072007-04-10 19:55
你在我代码的基础上说详细点你的问题,我没大看明白!
呵呵,不好意思
#8
梦自在2007-04-10 19:58
回复:(aipb2007)你在我代码的基础上说详细点你的问...
display_up(n);放在后面我知道是从n开始输出
但display_up(n);放在前面怎么是从1开始输出了
#9
aipb20072007-04-10 20:28
void display_up(int n){
if (n-- > 0){
display_up(n);
++n;
for (int i = 1;i <= n;++i)
cout << n << " ";
cout << endl;
}
return;
}
这个吧!反复调用display_up(n);每次都使n减去1,当n为0那次,if为假,所以跳向执行++n,n为1,输出第一行。跟着继续执行到return,至此,程序回到display_up(n)处,这是n为1,在执行下一句,++n,n为2,在输出第2行,……

关键是每次调用函数本身时,都从红色部分断开,程序回记录一个断点,只有当下一次调用结束,再返回执行当前次。
你可以这样理解,每次调用函数本身,都要从头到尾运行函数体代码,如果中途被切断,表示当前次被暂停了。

如果你觉得我叙述还不清楚的话,就自己跟踪下,就可以发现程序执行的顺序了。
#10
独孤浪子2007-04-10 20:34
简单啊.看以下代码
void display_up(int n)
{
if (n-- > 0){
display_up(n);
++n;
for (int i = 1;i <= n;++i)
cout << n << " ";
cout << endl;
}
return;
}
void display_down(int n){
if (n > 0){
for (int i = 1;i <= n;++i)
cout << n << " ";
cout << endl;
display_down(--n);
}
return;
}
#11
梦自在2007-04-10 21:18

有点明白了
这return是返回到 display_up(n),
我开始一看还觉得到++n后,又要执行if (n-- > 0)哦,
在问也是多余的呢,我自己慢点去琢磨去
谢谢大家!!!

#12
I喜欢c2007-04-10 21:48
递归有个压栈过程...
#13
梦自在2007-04-10 21:56
...?
我就是在学栈的时候,就是汉诺塔算法时遇到的问题,才发现以前还没学好
#14
I喜欢c2007-04-10 22:11
汉诺塔算法 也是用递归~``
道理一样!
#15
梦自在2007-04-10 22:24
我想的是汉诺塔游戏可以用FLASH AS做出来,但是C++里面怎么做哦.
没有图形,没看到startDrag,moveTo之类的移动的函数.至少我现在还没用到,老师叫我们也没叫过.
真不知道C++是怎么做游戏的,至少做出来了也不方便,我是这么认为的
#16
I喜欢c2007-04-10 23:22
呵呵~``
是你还不了解...
了解了就知道了~``
#17
wfpb2007-04-11 09:16

    -
   ---
  -----
-------
---------
这样做

[此贴子已经被作者于2007-4-11 9:17:39编辑过]

1