中易网

fn是一个函数。f(n) = f(n-1) + f(n-3), n > 3 f(n) = n, n <= 3,要求写一个程序。

答案:3  悬赏:20  
解决时间 2021-02-20 19:36
求f(n)%m.n <= 10000, 2 <= m <= 10000.程序运行总超时,如何用一个数组存递归函数中 用过的数啊,求助。这是我设计的程序
#include
using namespace std;
int main()
{
int fn(int i);
int n,m,a,b;
cout<<"please input n,m.(n<=10000,2<=m<=10000)"< cin>>n>>m;
b=fn(n);
while(n!=0&&m!=0)
{
if(b>=0)
a=b%m;
else
a=(b%m+m)%m;
}
cout< return 0;
}

int fn(int i)
{
int p;
if(i<=3)
p=i;
else
p=fn(i-1)+fn(i-3);
return p;
}
最佳答案
不要用递归函数做,数字大的时候,递归层次太深,资源占用很厉害,况且很多语言对递归层次是有限制的。也无需用n个元素的数组。实际上你只需要4个变量轮转使用即可。
int fn(int i)
中的p=fn(i-1)+fn(i-3); 用循环替代,需要一个控制次数的变量j,4个整型变量如
int p1,p2,p3,p4
每次循环做如下轮转:p1=p2, p2=p3, p3=p4, p4=p1+p3
这里给你提供这个思路,供参考。具体程序你自己编吧。
全部回答
我晕,while段死循环啊,没出口
在while循环里,m和n的值都没变,因此程序进入一个死循环, while(n!=0&&m!=0) { if(b>=0){ a+=b%m; n=b/=m; a*=10; } else a+=(b%m+m)%m; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
歌词里有"三八二十四三九二十七"是男的唱的,
戈尔超市在哪里啊,我有事要去这个地方
何时使用SET和SELECT为变量赋值
诛仙重阳节阅读书在哪里?
想报考华侨大学在职研究生建筑学院 方向的,不
10款奔驰外接音频线
如何给孩子写招魂贴!
美的空调kfr 23gw/dy-ib e1 制冷面积是多少
哪位翻译下: my future my name is tom and
pptv为什么突然只能支持mp4格式
难道黄家驹beyond乐队被人已经遗忘了吗??
难过死了 浪费了好多父母的钱 买来的东西也掉
星期六餐馆这个地址在什么地方,我要处理点事
我已经申请上了Yale的Summer scool,对申请本
人体感应led 吸顶灯怎么接
推荐资讯
2017款polo什么时候上市
广西十大镇有哪些
BEYOND生命接触演唱会
PS cs6总是死机怎么解决
梦幻129的天宫转门派转到天宫需要什么条件比
看图猜谜语,预防脑痴?看你能猜对几个。
铜陵有没有造纸厂收废纸壳的
厦门大学通信工程系考研初试考的哪些?
美加净白睡莲水嫩美白霜抹脸上不自然怎么办。
我是锦州的 我想问要是离婚了 还无房 想落回
锦州医科大学专业调整办法
华生化学建材新技术开发公司怎么去啊,有知道
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?