(c++)1*2*3 + 2*3*4 +3*4*5 +... +n*(n+1)*(n+2)递归怎么写??

(c++)1*2*3 + 2*3*4 +3*4*5 +... +n*(n+1)*(n+2)递归怎么写??,第1张

#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)21

double 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;
}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12868340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存