第一层递归解决X[0]=1,2,3,4,5,......300,所有的情况,第二层递归解决X[1]=1,2,3,4,5,6.....300,的所有情况............
总之,X[]有几个元素,就递归几层!
这个是有点难度,不过实际当中用不上!
[此贴子已经被作者于2006-6-27 16:36:12编辑过]
反清复明 http://xupeng.
using System;
namespace 面试递归题
{
class Class1
{
////////run函数,就调用它就可以了
public static void run(int num)//输入数组个数
{
int[] a = new int[num];
int[] x = new int[num];
for(int i=0;i<num;i++)//初始化int[] a
{
Console.WriteLine("请输入第"+(i+1).ToString()+"个数字!");
a[i]=Convert.ToInt32(Console.ReadLine());
}
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());////////经过了修改,加了个+x[i].ToString(),不好意思啊!
}
Console.WriteLine("和是:"+sum.ToString());
Console.WriteLine("---------------------------------------------------------------");
}
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;////以知不可能满足条件,即已经超范围了.
}
}
}
}
[STAThread]
static void Main(string[] args)
{
int num;
Console.WriteLine("请输入数组个数!");
num=Convert.ToInt32(Console.ReadLine());
run(num);
}
}
}
[此贴子已经被作者于2006-6-28 20:39:55编辑过]
[CODE]using System;
namespace temp
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
//public void run(int num);
//public void compute(int t,int sum);
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
temp.Class1 a=new Class1 ();
a.run (3);
}
protected int num;
protected int[] a = new int[300];
protected int[] x = new int[300];
////////run函数,就调用它就可以了
public void run(int num)//输入数组个数
{
for(int i=0;i<num;i++)//初始化int[] a
{
Console.WriteLine("请输入第"+(i+1).ToString()+"个数字!");
a[i]=Convert.ToInt32(Console.ReadLine());
}
compute(1,0);//开始递归调用,compute是递归函数
}
////////////compute函数,由程序的run函数自动调用,不用手动调用
public void compute(int t,int sum)//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()+":");
}
Console.WriteLine("和是:"+sum.ToString());
Console.WriteLine("---------------------------------------------------------------");
}
else
{
for(int i=0;i<300;i++)///////////分成300种情况
{
x[t-1]=i;
sum+=a[t-1]*x[t-1];
if(sum<300)//////////如果有满足条件的可能,再深入调用
{
compute(t+1,sum);
}
else
{
return;////以知不可能满足条件,即已经超范围了.
}
}
}
}
}
}[/CODE]
因为你第二个函数调用了第一个里面的x a变量
我建立了一个控制台测试了一下你的程序
不过好象输出是0
你看是不是我改你的程序改出问题了