本人写的是用2个函数分别求递归,得到总的值。
请教这个问题如何在一个递归函数内求解。。。
利用递归计算(不准使用while for)
求出 1!+2!+3!+4!+.....10!
关于1!+2!+......+9!+10!的算法。。用递归实现。。。
答案:5 悬赏:0 手机版
解决时间 2021-03-03 19:52
- 提问者网友:听门外雪花风
- 2021-03-03 02:27
最佳答案
- 五星知识达人网友:封刀令
- 2021-03-03 03:18
可以实现的,原理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 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);
}
}
全部回答
- 1楼网友:深街酒徒
- 2021-03-03 06:18
你用啥语言啊???我随便写了啊 你凑合看吧
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;
}
- 2楼网友:酒安江南
- 2021-03-03 05:51
#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)); }
- 3楼网友:不如潦草
- 2021-03-03 05:10
递归的表达式是 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)
- 4楼网友:蕴藏春秋
- 2021-03-03 04:26
貌似在哪见过
像是车厢问题来着
默认序列是从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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯