[CODE]using System;
namespace 面试递归题
{
class Class1
{
////////run函数,就调用它就可以了
public static void run(int num)//输入数组个数
{
int[] a = new int[num];
int[] x = new int[num];
WriteResult("");
WriteResult(System.DateTime .Now .ToString ());
for(int i=0;i<num;i++)//初始化int[] a
{
WriteResult("请输入第"+(i+1).ToString()+"个数字!");
Console.WriteLine("请输入第"+(i+1).ToString()+"个数字!");
a[i]=Convert.ToInt32(Console.ReadLine());
WriteResult(a[i].ToString ());
}
compute(1,0,num,a,x);//开始递归调用,compute是递归函数,层数,和,个数,数组,数组
}
////////////compute函数,由程序的run函数自动调用,不用手动调用
public static void compute(int t,int sum,int num,int[] a,int[] x)//int t 代表递归层数, int sum 代表a1x1+a2x2+a3x3+a4x4+a5x5................的和
{
if(t>num)//num是run函数中得到的数组个数,这是最后依次调用,输出结果!
{
for(int i=0;i<num;i++)
{
Console.WriteLine("x"+i.ToString()+":"+x[i].ToString()+" * a"+i+":"+a[i]);////////经过了修改,加了个+x[i].ToString(),不好意思啊!
WriteResult("x"+i.ToString()+":"+x[i].ToString()+" * a"+i+":"+a[i]);
}
Console.WriteLine("和是:"+sum.ToString());
WriteResult("和是:"+sum.ToString());
Console.WriteLine("^^^^^^^^^^^^^^^^");
WriteResult("^^^^^^^^^^^^^^^^");
}
else
{
for(int i=0;i<300;i++)///////////分成300种情况
{
int sumnei=sum;
x[t-1]=i;
sumnei=sum+(a[t-1]*x[t-1]);
if(sumnei<300)//////////如果有满足条件的可能,再深入调用
{
compute(t+1,sumnei,num,a,x);
}
else
{
return;////以知不可能满足条件,即已经超范围了.
}
}
}
}
private static void WriteResult(string text)
{
System.IO.StreamWriter wr=new System.IO.StreamWriter("d:\\Result.log",true,System.Text.Encoding.Default);//文件保存操作
wr.WriteLine ();
wr.Write(text);
wr.Close();
}
[STAThread]
static void Main(string[] args)
{
int num;
WriteResult("请输入数组个数!");
Console.WriteLine("请输入数组个数!");
num=Convert.ToInt32(Console.ReadLine());
WriteResult(num.ToString ());
run(num);
}
}
}[/CODE]
俺加工了一下你的代码 使它能够打印出来 默认到D盘根目录 result.txt
你的程序挺好的 HOHO
[此贴子已经被作者于2006-6-30 9:10:46编辑过]
此号自封于2006年11月30日