C语言怎样用递归方法编写程序 求s=1!+2!+3!+...10!

C语言怎样用递归方法编写程序 求s=1!+2!+3!+...10!,第1张

下面是测试的结果:

测试结果

思路:先通过程序获得阶乘的值,之后再将阶乘相加,求阶乘时和相加时都用递归的写法

首先是求阶乘:

int factorial(int index){

  int sum = 0;

  if (index == 1){

      sum = 1;

  }else{

      sum = index factorial(index-1);

  }

  return sum;

}

之后再求和:

int add_recursion(int maxnum){

  int sum = 0;

  if (maxnum == 1){

      sum = factorial(maxnum);

  }else{

      sum = factorial(maxnum) + add_recursion(maxnum-1);

  }

  return sum;

}

下面是完整的代码:

完整代码

/还没下班!喔,好冷啊!手都冻僵了!/
#include<stdioh>
int n=0;//递加后的结果,初始化为0。
int fun( int x)
{
n= x+n;
x--;
if(x<1)//这里不能用( x<=1)。
{
return n;
}
else
{ fun( x);};
}
main()
{
int i;
printf("请输入你要累加到的值\n");
scanf("%d",&i);
fun(i);
printf("累加后的值为:% d\n", n);
return 0;
}

// 数组中表示前一种语言对后一种语言有影响var influences = [
['Lisp', 'Smalltalk'],
['Lisp', 'Scheme'],
['Smalltalk', 'Self'],
['Scheme', 'JavaScript'],
['Scheme', 'Lua'],
['Self', 'Lua'],
['Self', 'JavaScript']];// 获得受某种语言直接影响的语言的列表function nexts(graph, node) {  if (_isEmpty(graph)) return [];  var pair = _first(graph);  var from = _first(pair);  var to   = second(pair);  var more = _rest(graph);  if (_isEqual(node, from))    return construct(to, nexts(more, node));  else
return nexts(more, node);
}
nexts(influences, 'Lisp');// 输出: ["Smalltalk", "Schema"];

后面又给了一个练习题,让nexts能够遍历多个节点。我理解这个练习题的要求是:
参数:influences, nodes (例如['Lisp', 'Self'])
输出:

{
Lisp: ["Smalltalk", "Schema"],
Self: ["Lua", "JavaScript"]

感觉这个递归有两个结束条件:

_isEmpty(graph) 表示当前节点递归完了

_isEmpty(nodes) 表示所有节点递归完了

想了半天,除了在nexts外层套一个循环外,没能写出很好的递归方法。

希望各路大神能给一个思路,如果能给出一个多条件递归时的思路总结,说明一下这种问题应如果分解,就再好不过了。

写了一个示例,里面包含了执行环境和用到的工具函数,可以在这里实验。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存