zoukankan      html  css  js  c++  java
  • 用递归正/逆序打印一个数组,以及调用返回的过程理解

     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
    ",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
    ",*(p+n));
    26     else
    27     {
    28         printf("%d	",*(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
    ",*(p+n));
    38     else
    39     {
    40         printf("%d	",*(p+n));//打印当前元素
    41         arr2(p,n-1);//继续调用自己,将首地址和偏移量发送出去。
    42     }
    43 }
  • 相关阅读:
    day22 os模块
    开始 Dojo 开发
    Java 多线程编程
    Oracle 中常用数据字典大总结
    使用Java API的5个技巧
    Java 守护线程概述
    给Java新手的一些建议——Java知识点归纳(Java基础部分)
    消息中间件收录集
    2017年Java面试题整理
    Java 9 新特性快速预览
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9538493.html
Copyright © 2011-2022 走看看