永发信息网

关于1!+2!+......+9!+10!的算法。。用递归实现。。。

答案:5  悬赏:0  手机版
解决时间 2021-03-03 19:52
本人写的是用2个函数分别求递归,得到总的值。

请教这个问题如何在一个递归函数内求解。。。

利用递归计算(不准使用while for)
求出 1!+2!+3!+4!+.....10!
最佳答案
可以实现的,原理f(n)=f(n-1)+n!=f(n-1)+n* (n-1)! = f(n-1)+n* ( f(n-1)-f(n-2) )
int f(int n)
{
if(n==1) return 1;
else if(n==2) return 3;
else if(n<=0) exit(0);
else
{
return f(n-1)+n* ( f(n-1)-f(n-2);
}
}
全部回答
你用啥语言啊???我随便写了啊 你凑合看吧 int f(int i){ if(i == 1) return 1; ///////////////求阶乘 没测试 只是思路 int sum = i; int step = i; while(step-- > 1){ sum*=step; } ///////////////////////////// sum+=f(--i); return sum; }

#include<stdio.h>

int fab(int n) {  if (n==0||n==1) return 1;  else return fab(n-2)+fab(n-1); }

int main() {  printf("%d",fab(30)); }

递归的表达式是 f(n)=n*(f(n-1)-f(n-2))+f(n-1) 递归出口是n=1和n=2的时候。 def f(n): if n==1: return 1 if n==2: return 3 else: return n*(f(n-1)-f(n-2))+f(n-1) if __name__=="__main__": print f(10)
貌似在哪见过 像是车厢问题来着 默认序列是从1......9 读取一个数,如果与当前数(即默认序列里的)对应则压栈,然后出栈,继续读数,否则从1按顺序继续压栈,直到是该数,然后这个数出栈,继续出栈,出栈得数如果与输入序列相同就yes否则就no 循环即可 例如:32154 读取一个3,3!=1,所以从1压栈push(1),push(2),push(3) 出栈pop(3), pop(2),与序列相等,继续pop(1)又相等, 栈空了,读数是5,但当前是4,所以压栈4,然后压5 出栈pop(5),pop(4)又相等 所以yes了 no的情况相似 代码如下: //stack.h #ifndef STACK_H #define STACK_H #include using namespace std; class Node { public : void * data; Node * next; Node():data(0),next(0){} }; class Stack { private : Node * head; public : Stack(); ~Stack(); void push(void * p); void * pop(); int isnempty(); void* top(); }; Stack::Stack():head(0){} void * Stack::pop() { if(head == 0) { cout<<"kong le !"<<'\n'; return 0; } Node * temp = head; void * dat = head->data; head = head->next; delete temp; return dat; } void Stack::push(void *p) { Node * newptr = new Node; newptr->data = p; newptr->next = 0; if(head == 0) head = newptr; else{ newptr->next = head; head = newptr; } } Stack::~Stack() { Node * temp; while(head) { temp = head; head = head->next; delete temp; } } int Stack::isnempty() { if(head == 0) return 0; return 1; } void* Stack::top() { if(head == 0) return 0 ; else return head->data; } #endif //intstack.h #include"stack.h" using namespace std; class Intstack: public Stack { public : int pop(); void push(int * str); int top(); }; int Intstack::pop() { return *(int*)Stack::pop(); } void Intstack::push(int *str) { Stack::push(str); } int Intstack::top() { if(Stack::top() == 0) return 0; else return *(int*)Stack::top(); } //main #include"intstack.h" #include using namespace std; int main() { Intstack inte; vector v; v.push_back(2); v.push_back(4); //312456789 v.push_back(3); //243156789 v.push_back(1); //154637289 v.push_back(5); v.push_back(6); //这里我是为了测试,采用这种方法 v.push_back(7); //实际上你可以从文件读数据的,相信你应该会 v.push_back(8); v.push_back(9); int i =0; for(int last =0 ,coach ; i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯