C语言用递归颠倒一个栈,动态栈,不知道怎么递归。分两次递归,一次压栈,一次出栈。菜鸡在这里求指教了

这是我的主函数。

按照题意应该是一个
int i=1;用来给数组需要赋值定位到具体存储单元,此处从数组第二开始赋值。下表0第一
int a[];入栈单元用来临时存储数据
f(n){

if(n-1=0)
{scanf;(简写其中a[i]赋值)
i++;}
else f(n-1);
}
出栈是逆序存储到存储单元(此例为了方便,上面的是加了一个数组。你可以直接使用一个数组,使用对换的方法。)
仅供参考。

如何设计递归算法
1.确定递归公式

2.确定边界(终了)条件

练习:

用递归的方法完成下列问题

1.求数组中的最大数

2.1+2+3+...+n

3.求n个整数的积

4.求n个整数的平均值

5.求n个自然数的最大公约数与最小公倍数

6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子

7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.

2.3典型例题

例3 快速排序

快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1,处理结束.

程序如下:

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

programkspv;
var
a:array[0..10000]oflongint;
i,n:integer;
procedurequicksort(l,r:longint);
vari,j,mid:longint;
begin
i:=l;j:=r;mid:=a[(l+r)div2];
repeat
whilea[i]<middoinc(i);
whilea[j]>middodec(j);
ifi<=jthen
begin
a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
inc(i);dec(j);
end;
untili>j;
ifi<rthenquicksort(i,r);
ifl<jthenquicksort(l,j);
end;
begin
write('inputdata:');
readln(n);
fori:=1tondoread(a[i]);
writeln;
quicksort(1,n);
write('outputdata:');
fori:=1tondowrite(a[i],'');
writeln;
end.追问

你。。。
复制的好明显

追答

你没有发现上面的例子不大对劲吗?那是我自己写的……你还得再调整一下,后面那些就是复制的,主要是提高自己的递归思想的。

费了半小时好久不弄了。就是抛砖引玉。你在理解一下,参照下面算法设计

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答