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

 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 }

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

时间: 2024-10-02 23:48:50

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

用递归机制逆序输出一个字符串

1 package fa.ct; 2 3 public class Nixu { 4 5 static String input="abcdefg"; 6 public static String ltof(String input){ 7 if(input.isEmpty()){ 8 return input; 9 } 10 return ltof (input.substring (1)) + input.charAt (0); 11 } 12 public static void

输入一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

package com.hanqi; import java.util.*; public class Nixudayin { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println("输入一个不多于5位的正整数"); Scanner shu=new Scanner(System.in); String a=shu.next(); System.out.println("输入的

给一个不多于5位的正整数,求它是几位数并且逆序打印出各位数字

//给一个不多于5位的正整数,要求:求它是几位数并且逆序打印出各位数字. #include <stdio.h>void main(){    int num,s=0;     printf("请输入一个整数,不多于5位数:\n");     scanf("%d",&num);     while(num>0)     {     printf("%d",num%10);     num=num/10 ;     s++;

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

package lianxi; import java.util.*; public class Nixudayin { public static void main(String[] args) { System.out.println("输入一个不多于5位的正整数"); Scanner shu=new Scanner(System.in); String a=shu.next(); System.out.println("输入的是"+a.length()+&q

用指针??输入一个数组,逆序输出该数组

/* *Copyright(c) 2014 烟台大学计算机学院 *All rights reserved. * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:杨汉宁 * 完成日期:2014年 12 月 11 日 * 版 本 号:v1.0 * * 问题描述:输入一个数组,逆序输出该数组 * 输入描述:输入一个数组 * 程序输出:逆序输出该数组 */ #include <iostream> us

c语言 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    6,给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. //    int num = 0,temp = 0,i = 0; //    printf("输入一位数字:"); //    scanf("%d",&num); //    while (num>0) { //        temp = num % 10; //        printf("%d",temp); //        i++

面试:用 Java 逆序打印链表

昨天的 Java 实现单例模式 中,我们的双重检验锁机制因为指令重排序问题而引入了 volatile 关键字,不少朋友问我,到底为啥要加 volatile 这个关键字呀,而它,到底又有什么神奇的作用呢? 对 volatile 这个关键字,在昨天的讲解中我们简单说了一下:被 volatile 修饰的共享变量,都会具有下面两个属性: 保证不同线程对该变量操作的内存可见性. 禁止指令重排序. 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量. 可见性:一个线

算法习题---线性表之单链表逆序打印

一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即可 三:算法实现(这里使用方法一:递归实现简单易懂) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #def

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954