黑马程序员技术交流社区

标题: 怎么使用递归,使数组倒序输出? [打印本页]

作者: hehe04    时间: 2012-8-30 09:14
标题: 怎么使用递归,使数组倒序输出?
今天看了一个面试题,要求使用递归的方法,使数组翻转 。例如 {1,2,3,4,5,6}变成{6,5,4,3,2,1}
作者: 许庭洲    时间: 2012-8-30 09:59
本帖最后由 许庭洲 于 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));//蓝色部分采用了递归方法进行数组翻转
             }
      }
}
作者: 资建文    时间: 2012-8-30 17:48
学习了!
作者: 黑马杨凯    时间: 2012-8-31 23:51
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);//递归调用
        }
    }
}

这样也可以
作者: 尤洋    时间: 2012-9-1 09:00
本帖最后由 尤洋 于 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.         }
复制代码

作者: 张文    时间: 2012-9-1 22:20
数组本来就带返转方法的,递归用多了不好。
  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. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2