用递归正/逆序打印一个数组,以及调用返回的过程理解
Posted 王朝马汉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归正/逆序打印一个数组,以及调用返回的过程理解相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h> 2 /* 3 题目:用递归正/逆序打印数组的元素,以及递归调用的过程理解 4 正序打印数组解题思路:第一:数组元素是连续的。知道第一个元素的地址,就能推算出第二个元素的地址。以此类推 5 第二:数组的结束条件:i = sizeof(arr)/4 -1; 此时的值为arr[sizeof(arr)/4-1]; 6 第三:后一个元素的值的下标 = 前一个元素的值的下标+1 (通项公式) 7 */ 8 void arr1(int *p,int n,int *p1); 9 void arr2(int *p,int n); 10 int main(void) 11 { 12 int arr[8] = {1,2,3,4,5,6,7,8}; 13 int k = 0; 14 arr1(arr,0,&k);//正序 15 printf("k = %d\n",k);//调用的返回过程 16 arr2(arr,7);//逆序 17 18 19 return 0; 20 } 21 //递归正序打印数组元素 22 void arr1(int *p,int n,int *p1) 23 { 24 if(n == 7)//结束条件 25 printf("%d\n",*(p+n)); 26 else 27 { 28 printf("%d\t",*(p+n));//打印当前元素 29 arr1(p,n+1,p1);//继续调用自己,将首地址和偏移量发送出去。注意点:逐级返回的时候:返回arr1(p,n+1,p1); 分号后面 执行 (*p1)++; 然后执行} 在执行函数结束的} 30 (*p1)++; //即:返回执行调用语句后面的内容,直至函数结束。 31 } 32 } 33 //递归逆序打印数组元素 34 void arr2(int *p,int n) 35 { 36 if(n == 0)//结束条件 37 printf("%d\n",*(p+n)); 38 else 39 { 40 printf("%d\t",*(p+n));//打印当前元素 41 arr2(p,n-1);//继续调用自己,将首地址和偏移量发送出去。 42 } 43 }
以上是关于用递归正/逆序打印一个数组,以及调用返回的过程理解的主要内容,如果未能解决你的问题,请参考以下文章