码迷,mamicode.com
首页 > 编程语言 > 详细

用递归正/逆序打印一个数组,以及调用返回的过程理解

时间:2018-08-26 20:52:34      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:eof   ==   col   bsp   amp   \n   ret   oid   自己   

 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 }

 

用递归正/逆序打印一个数组,以及调用返回的过程理解

标签:eof   ==   col   bsp   amp   \n   ret   oid   自己   

原文地址:https://www.cnblogs.com/wangchaomahan/p/9538493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!