下面是测试的结果:
测试结果
思路:先通过程序获得阶乘的值,之后再将阶乘相加,求阶乘时和相加时都用递归的写法
首先是求阶乘:
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外层套一个循环外,没能写出很好的递归方法。
希望各路大神能给一个思路,如果能给出一个多条件递归时的思路总结,说明一下这种问题应如果分解,就再好不过了。
写了一个示例,里面包含了执行环境和用到的工具函数,可以在这里实验。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)