#include<iostream>
using namespace std;
int fact(int n)
{
if(n==0)
return 0;
if(n==1)//递归终止条件
return 123;
if(n>1)
return fact(n-1)+n(n+1)(n+2);
}
int main()
{
int n,x;
cin>>n;
x=fact(n);
cout<<x;
return 0;
}
呵呵,这个我以前做过,你的代码我就不看了/// <summary>
/// 登录事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void source_Load(object sender, EventArgs e)
{
//添加桌面结点
TreeNode rootnode = treeView1Nodes[0];
//添加我的电脑和我的文档两个节点
TreeNode ndMyComputer = null;
TreeNode ndMyDocument = null;
foreach (TreeNode nd in rootnodeNodes)
{
if (ndName == "Node3")
{
ndMyComputer = nd;
}
if (ndName == "Node2")
{
ndMyDocument = nd;
}
}
// 调用方法
AddTreenode(ndMyComputer, ndMyDocument);
}
/// <summary>
/// 增加子文件夹方法
/// </summary>
/// <param name="ndMyComputer"></param>
/// <param name="ndMyDocument"></param>
public void AddTreenode(TreeNode ndMyComputer, TreeNode ndMyDocument)
{
//添加"我的电脑"的子节点
DriveInfo[] drivers = DriveInfoGetDrives();
foreach (DriveInfo driver in drivers)
{
TreeNode node = new TreeNode(driverName);
nodeImageKey = "a";
nodeSelectedImageKey = "a";
nodeTag = driverRootDirectoryFullName;
if (ndMyComputer != null) ndMyComputerNodesAdd(node);
}
//添加"我的文档"的子节点
string MyDocumentPath = EnvironmentGetFolderPath(EnvironmentSpecialFolderMyDocuments);
DirectoryInfo MyDocument = new DirectoryInfo(MyDocumentPath);
DirectoryInfo[] folders = MyDocumentGetDirectories();
foreach (DirectoryInfo folder in folders)
{
TreeNode node = new TreeNode(folderName);
nodeImageKey = "a";
nodeSelectedImageKey = "a";
nodeTag = folderFullName;
if (ndMyDocument != null) ndMyDocumentNodesAdd(node);
}
}
/// <summary>
/// 点击+图标发生的事件,双击亦可以产生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
// 调用方法
AddFile(e);
}
/// <summary>
/// 递归增加文件夹方法
/// </summary>
/// <param name="e"></param>
public void AddFile(TreeViewEventArgs e)
{
//对桌面结点而言
if (eNodeParent == null)
{
return;
}
foreach (TreeNode node in eNodeNodes)
{
//对我的文档和我的电脑结点而言
if (nodeTag == null)
{
continue;
}
//尝试添加第三层,第四层,第五层,其中第一层是我的文档和我的电脑
DirectoryInfo folder = new DirectoryInfo(nodeTagToString());
DirectoryInfo[] subFolders = null;
try
{
subFolders = folderGetDirectories();
}
catch (IOException)
{
}
catch (UnauthorizedAccessException)
{
}
if (subFolders != null)
{
foreach (DirectoryInfo subFolder in subFolders)
{
TreeNode subNode = new TreeNode(subFolderName);
subNodeImageKey = "a";
subNodeSelectedImageKey = "a";
subNodeTag = subFolderFullName;
nodeNodesAdd(subNode);
}
}
}
}
这些程序就能实现你要的内容,自己看看吧因为这是一个不断递归下去的方法,你总得给他一个停止递归的条件对吧,如果n超过了L,显然是不合适的,没必要再继续把n加1了,这时,就需要用return强制返回上一层的递归,不再进行递归了楼上没学过C吧
递归函数嘛,
这个很简单也很正常
n=10开始,然后执行
cin>>c;
iochar(n-1);
递归嘛,一直到n=1
执行cin>>c;
cout<<c;
最后执行
cout<<c;
但是很调用一次函数都有一句
cout<<c;
在输入完十个数之前不会输出,因为每次调用函数都会要求一个输入值
所以必须当你全部输入完程序才能正常运行
为什么会倒着输出呢,
显然最后运行时是从最内圈才始的,cout<<c;
这个c在最内圈的函数里,最后一个输入的,最先输出感觉你的基本概念不清楚,建议你从头认真看下JAVA的一些基本概念。
针对你提的问题解答如下:
calc(int n)是一个方法
Systemoutprintln("10的阶乘为:"+calc(10)); 中的calc(10)表示调用calc方法,同时将10传递给方法的形参n,这样n=10(这个表示等于,相当于程序中的==,下同)
而在calc()方法内部,是说如果n=1,方法就返回结果1,如果不等于就返回n calc(n-1)。而这个时候的calc(n-1)又再一次调用calc方法,同时将n-1传递给方法的形参n,这样n=9
如此循环调用,直到最后一次n=1时方法直接返回1
所以calc()方法求的是n的阶乘,也就是n(n-1)(n-2)21double AveList(const Linklist&L)
{
static double sum=00;
static int ncount=0;
if(L)
{
++ncount;
sum+=L->data;
AveList(L->next);
}
else
{
double temp=sum/ncount;
sum=00;
ncount=0;
return temp;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)