#include<stdio.h>
int main()
{
void move(int[20], int, int);
int number[20], n, m, i;
scanf_s("%d",&n);
for (i = 0;i < n;i++)
scanf_s("%d", &number[i]);
scanf_s("%d", &m);
move(number, n, m);
for (i = 0;i < n;i++)
printf("%d ", number[i]);
}
void move(int array[20], int n, int m)
{
int *p, arrayend;
arrayend = *(array + n - 1);
for (p = array + n - 1;p > array;p--)
*p = *(p - 1);
*array = arrayend;
m--;
if (m > 0)move(array, n, m);
}
递归的意思:
一个递归 这个还算简单
这个函数除去最后一行 其作用是将n个数向后移动一位
array_end=*(array+n-1); 先将最后一个数保存下来
for(p=array+n-1;p>array;p--); 循环 使其他的n个数逐个向后移动一位
*p=*(p-1);
*array=array_end; 将被保存下来的最后一个数赋值给第一个数
实现将n个数向后移动一位
m--; 因为是要移动m个数 所以定义m来记数 每移动一位 m减一
if(m>0) move(array,n,m); 在m大于0的情况下 将刚刚已经移动过的新数组传给下一个函数 继续移动
感谢poppylx