A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hehe04 中级黑马   /  2012-8-30 09:14  /  5195 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了一个面试题,要求使用递归的方法,使数组翻转 。例如 {1,2,3,4,5,6}变成{6,5,4,3,2,1}

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 许庭洲 于 2012-8-30 10:01 编辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 数组翻转
{
      calss Program
      {
              static void Main(string[] args)
              {  
                     int[] num = new int[]{1,2,3,4,5,6}; //初始化数组
                     intReverse(num);//调用翻转函数
                     Console.WriteLine("数组翻转后的结果:");
                     for(int i=0;i<num .Length;i++)//挨个输出翻转后的元素
                     {
                           Console.Write(num +" ");
                     }
                           Console.WriteLine();
             }
             static string intReverse(int[] a)
             {
                     if (a.Length == 1)
                            return a;
                     else
                            return a.Substring(a.Length - 1, 1) + stringReverse(a.Substring(0, a.Length - 1));//蓝色部分采用了递归方法进行数组翻转
             }
      }
}
回复 使用道具 举报
学习了!
回复 使用道具 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 递归反转数组
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 2, 5, 34, 7, 51 };//初始int数组
            ReverseArray(nums, 0,nums.Length-1);//调用反转函数

            //输出结果
            foreach (int i in nums)
            {
                Console.Write(i + " ");
            }

            Console.ReadKey();
        }

        /// <summary>
        /// ReverseArray()反转int[]数组
        /// </summary>
        /// <param name="nums"></param>
        /// <param name="startIndex">startIndex是int[]的你要反转的部分的起始索引</param>
        /// <param name="endIndex">endIndex是int[]的你要反转的部分的终止索引</param>
        public static void ReverseArray(int[] nums,int startIndex,int endIndex)
        {
            if (startIndex >= endIndex)
            {
                return;
            }
            int temp = nums[startIndex];
            nums[startIndex] = nums[endIndex];
            nums[endIndex] = temp;
            ReverseArray(nums, startIndex + 1, endIndex - 1);//递归调用
        }
    }
}

这样也可以

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 尤洋 于 2012-9-1 09:01 编辑
  1. //发个代码短一点的
  2. public class Test5 {
  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 int[] arr={1,2,3,4,5};
  6.                 print(arr.length-1,arr);
  7.         }
  8.         public static void print(int j,int[]arr)
  9.         {        
  10.                 System.out.println(arr[j]);
  11.                 if((j-1)>=0)
  12.                 print(j-1,arr);//方法中再次调用方法
  13.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
数组本来就带返转方法的,递归用多了不好。
  1. static void Main(string[] args)
  2. {
  3. Console.WriteLine(stringReverse("abcdef"));
  4. }
  5. static string stringReverse(string s)
  6. {
  7. if (s.Length == 1)
  8. return s;
  9. else
  10. return s.Substring(s.Length - 1, 1) + stringReverse(s.Substring(0, s.Length - 1));
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马