如题,谁能用递归帮忙写个呀  面试题,必须要做出来,求求大家帮帮忙了。。在线等答案

解决方案 »

  1.   

    到google查 3.1415926的求法就知道了
      

  2.   

    这也用递归?
    string aa = "";
    int i=-1;
    private string funtion(int num1, int num2)
    {
        int num3 = num1%num2;
        i++;
        if(i>=0 && i<300)
        {
           aa += funtion(num3, num2);
        }
        return num3.tostring();
    } 就这样吧,我感觉这东西用递归,不知道什么想法
      

  3.   

            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(funGetValue(22, 300).ToString());
            }
            private int funGetValue(int intDividend, int intDotNo)
            {
                int intMod, intValue;
                intMod = intDividend;
                do
                {
                    intValue = intMod / 7;
                    intMod = intMod % 7;
                } while (intMod > 7);            for (int i = 1; i <= intDotNo; i++)
                {
                    //intValue = funGetValue(intMod * 10, 1);
                    intValue = (intMod * 10)/7;
                    intMod = (intMod*10) % 7;
                }
                return intValue;
            }
      

  4.   

    namespace Test1
    {
        public partial class Form1 : Form
        {
            int iDecimalPointCount;
            int iDecimalPointValue;
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                int i1 = 22 % 7;
                iDecimalPointValue = 0;
                iDecimalPointCount = 1;
                while(true)
                {
                    i1 = CalcResult(i1);
                    if(iDecimalPointCount ==Convert.ToInt32(numericUpDown1.Value))
                        break ;
                    iDecimalPointCount++;
                }
                textBox1.Text = iDecimalPointValue.ToString();
            }        private int CalcResult(int i1)
            {
                int iResult;
                if (i1 < 7)
                    iResult = i1 * 10;
                else
                    iResult = i1;
                iDecimalPointValue = iResult / 7;
                return iResult % 7;
            }
        }
    }
      

  5.   

    我也来一个:
    /// <summary>
    /// 整数相除,结果保存在范型中
    /// </summary>
    /// <param name="a"></param>
    /// <param name="b"></param>
    /// <param name="result"></param>
    public static void Div(int a, int b, ref List<char> result)
    {
    if (result.Count >= 300)
    {
    return;
    }
    result.Add((char)(48 + a / b));
    Div((a % b) * 10, b, ref result);
    }
    调用:
    List<char> list = new List<char>();
    int num1 = 2;
    int num2 = 7;
    //先计算整数部分
    list.AddRange((num1 / num2).ToString());//如果两个数不能整除,则计算小数部分
    if (num1 % num2 != 0)
    {
    list.Add('.');
    Div((num1 % num2) * 10, num2, ref list);
    }
    //将结果转换成字符串
    string ret = new string(list.ToArray());
      

  6.   

        class Program
        {
            //统计次数
            static int count = 0;
            static void Main(string[] args)
            {
                //
                Console.WriteLine(GetNum(22));
            }
            static int GetNum(int num)
            {            if (num < 7)
                {
                    num *= 10;
                    ++count;
                }
                //第300位是多少
                if (count < 300) 
                    return GetNum(num % 7);
                else
                    return num / 7;
            }
        }
      

  7.   

            public static string result="."; 
            static void Main()
            {            
                Caculate(22, 7,0);
                Console.WriteLine(result);
               
            }
            public static void Caculate(int dividend, int divisor,int count)
            {
                dividend = dividend % divisor*10;
                result += (dividend / divisor).ToString();
                if (count < 301)
                    Caculate(dividend, divisor, result.Length);
            }
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    using System.Xml;
    using System.Collections;namespace CSharpTest
    {    class Program
        {
            static void Main(string[] args)
            {
                string re = string.Empty;
                div(22, 7, ref re);
                Console.WriteLine(re);
            }        /// <summary>
            /// num1/num2    
            /// </summary>
            /// <param name="num1"></param>
            /// <param name="num2"></param>
            /// <param name="result"></param>
            static void div(int num1, int num2, ref string result)
            {
                int num = num1 / num2;
                int left = num1 % num2;
                if (left < num2)
                {
                    if (result.Contains('.'))
                    {
                        result += num.ToString();
                    }
                    else
                    {                    result += num.ToString();
                        result += '.';
                    }
                }
                if (result.Length > 303)
                {
                    return;
                }
                div(left * 10, num2, ref result);
            }    }
    }
      

  9.   

            private void button10_Click(object sender, EventArgs e)
            {
                int a = 22;
                int b = 7;
                int result = 0;
                GegMod(a%b*10, b,result);        }        int i = 1;
            public void GegMod(int a, int b,int result)
            {
                if (a % b != 0&&i!=300)
                {
                    i++;
                    GegMod(a % b*10, b,result);
                }
                else if (i == 300)
                {
                    i = 1;
                    result = a / b; 
                }
            }
      

  10.   

    改一下
         private void button10_Click(object sender, EventArgs e)
            {
                int a = 22;
                int b = 7;            
                GegMod(a%b*10, b);        }        int i = 1;
            int result=0;
            public void GegMod(int a, int b)
            {
                if (a % b != 0&&i!=300)
                {
                    i++;
                    GegMod(a % b*10, b);
                }
                else if (i == 300)
                {
                    i = 1;
                    result = a / b; 
                }
            }
      

  11.   

           public static  string aa = "";
            public static int i = -1;        public static void funtion(int num1, int num2)
            {
                int num3 = num1 < num2 ? (num1 * 10) % num2 : num1 % num2;
                i++;
                if (i >= 0 && i < 300)
                {
                    aa += num1 < num2 ? (num1 * 10) / num2 : num1 / num2;
                    funtion(num3, num2);
                }
            }         static void Main(string[] args)
            {
                string bb = "";
                int i = 22;
                int j = 7;               
                funtion(i,j);
                if (i >= j)
                    bb = aa.Substring(0, 1) + "." + aa.Substring(1, aa.Length - 1);
                else
                    bb = "0." + aa;
                    
                Console.Write(aa);
                Console.Write(bb);
                Console.ReadLine();
            }
    不是很准确。
      

  12.   

    /*
    * 22/7后面的300位小数
    */#include <iostream>using namespace std;int temp,times=0;void Divide(int m,int n)
    {
    if(++times>300) return;
    temp = m%n;
    cout<<(m-temp)/n<<" ";
    if(times%10==0)
    cout<<endl;
    temp = temp*10;

    Divide(temp,n);
    }void main(void)
    {
    Divide(10,7);
    }
      

  13.   

    class Program
        {        public static  int sum = 0;
            public static int i = 0;
            public static int x = 22;
            public static int y = 7;        public static void funtion(int num1, int num2)
            {
                int num3 =(num1 * 10) % num2;
                i++;
                if (i == 300)
                {
                    sum = (num1 * 10) / num2 ;
                    return;
                }
                funtion(num3, num2);
            }         static void Main(string[] args)
            {             
                funtion(x % y , y);
                Console.Write(sum.ToString());
                Console.ReadLine();
            }
        }这个是只求小数点后第300位的数字。参考参考
      

  14.   


    private string GETR(int a,int b,int len,bool u)
    {
    if ( len < 1 ) return "";
    string str = ( a/b ).ToString();
    if ( u ) str += ".";
    int t = a%b;
    while(t<b) t*=10;
    return str+GETR(t,b,len-1,false);
    }
    调用string result = GETR( 22, 7, 300, true);
      

  15.   

    改进一下 对最后一位4舍5入private string GETR(int a,int b,int len,bool u)
    {
    string str = "";
    if ( len < 1 ) return "";
    if ( len == 1 )
    str = Math.Round((decimal)a/b).ToString();
    else
    str = ( a/b ).ToString();
    if ( u ) str += ".";
    int t = a%b;
    while(t<b) t*=10;
    return str+GETR(t,b,len-1,false);
    }
      

  16.   

    void MyRecursion(int dividend, int divisor, int count, int *arrRe)
    {
    static int i = 0;
    if (i++ == count)
    return;
    arrRe[i - 1] = dividend / 7;
    MyRecursion((dividend % 7) * 10, divisor, count, arrRe);
    }void main()
    {
    int arrRe[300];
    MyRecursion(22, 7, 300, arrRe);
    }
      

  17.   

    void MyRecursion(int dividend, int divisor, int count, int *arrRe)
    {
    static int i = 0;
    if (i++ == count)
    return;
    arrRe[i - 1] = dividend / divisor;
    MyRecursion((dividend % divisor) * 10, divisor, count, arrRe);
    }
      

  18.   

    void MyRecursion(int dividend, int divisor, int count, int *arrRe)
    {
    static int i = 0;
    if (i++ == count)
    {
    i = 0;
    return;
    }
    arrRe[i - 1] = dividend / divisor;
    MyRecursion((dividend % divisor) * 10, divisor, count, arrRe);
    }
      

  19.   


        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("22/7保留300位小数:"+GetBesidesstr(22, 7, 300, 0) + "<br/>");
            Response.Write("小数点后的第300位数是:"+GetBesidespos(22, 7, 300)+"<br/>");
        }
        private string GetBesidesstr(int a, int b, int i, int flag)
        {
            if (a % b == 0)
            {
                return (a / b) + "";
            }
            else
            {
                if (i == 0)
                {
                    return (a / b) + "";
                }
                else
                {
                    if (flag == 0)
                    {
                        return (a / b) + "." + GetBesidesstr((a % b) * 10, b, --i, 1);
                    }
                    return (a / b) + GetBesidesstr((a % b) * 10, b, --i,1);
                }
            }
        }
        private string GetBesidespos(int a, int b, int i)
        {
            if (a % b == 0)
            {
                return (a / b) + "";
            }
            else
            {
                if (i == 0)
                {
                    return (a / b) + "";
                }
                else
                {
                    return GetBesidespos((a % b) * 10, b, --i);
                }
            }
        }
      

  20.   

      [STAThread]
            static void Main()
            {
                int num1 = 22;
                int num2 = 7;
                int[] num = new int[300];
                GetNum(0, num, num1 % num2, num2);
                for (int i = 1; i <= num.Length; i++)
                {
                    Console.Write(num[i - 1]);
                    if (i % 12 == 0)
                        Console.Write("\n");
                    else
                        Console.Write(" ");
                }
                Console.ReadLine();
            }        static void GetNum(int i, int[] num, int num1, int num2)
            {
                if (i == 300) return;
                int temp = (num1 * 10) / num2;
                num1 = (num1 * 10) % num2;            if (temp != 0)
                {
                    num[i] = temp;
                    i++;
                    GetNum(i, num, num1, num2);
                }
            }