C程序设计 用递归的算法把数组中的N个数按颠倒的次序重新排放

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:46:54
C程序设计 “用递归的算法把数组中的N个数按颠倒的次序重新排放”

写上说明的,不然我会看不懂的·

还会追加分·
要40-60行的····

我来回答。递归是所有程序中最简短的程序,但是不好的地方是,占用内存太多,递归数过大,内存就会耗尽。是这样的,递归函数先层层深入,条件不满足时回溯回去。数组做行参是个地址常量相当于指针,fun1函数的功能是:当n大于1时,if语句总成立所以执行递归调用fun1函数,当n>1时&a[1]把地址传给了行参a[].循环调用的结果a地址最后指向了a[n-1],此时数组只有一个元素,数组直到n=1时,开始执行printf输出a[0],此时a[0]就是a[n-1],然后递归回溯回去,这样就输出原数组的a[n-2],一直回溯回去,知道输出所有的数.下面是源程序:
#include<stdio.h>
#include<stdlib.h>
#define N 10 /*数组元素个数定义,根据需要自己定义*/
void fun1(int a[],int n) //递归倒序输出数组元素
{
if(n>1)
fun1(&a[1],n-1);
printf("%5d",a[0]);
}
main(void)
{ int i,a[N],n;
n=N;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
fun1(a,n);
printf("\n");

}

#include <stdio.h>

// 递归完成颠倒数据
// 要想完成0~9的互换,必须完成0~4和5~9部分的互换,
// 要想完成0~4和5~9的互换,必须完成1~4和6~9的互换,
// .....................直到完成4和5的互换。
void Reverse(int* a, int len)
{
// 所有的数据都已经颠倒
if (len == 0 || len == 1)
return;

// 数组a