初学者算法-递归
大部分内容都在我的笔记里;
这里我们不能仅仅依靠递归:
毕竟递归还是有一个致命的缺陷,就是递归太多的时候,会需要很大的运行空间,甚至会终止程序的运行。所以在递归和循环的使用上,要根据具体情况选择使用;
诸如
菲波那契数列(2)
1000ms65536K
描述:
斐波那契数列意味着这样的数列:的第一个和第二个数是1,接下来的数等于前两个数的和。给定一个正整数A,斐波那契数列中第一个数取模1000的结果是什么?
输入:
第一行是n组测试数据的数量,后面是n行输入。每组测试数据占用一行,包括一个正整数A (1=a=1,000,000)。
输出:
n行,每行输出对应一个输入。输出应该是正整数,它是斐波那契数列中的A数模1000的结果。
样例输入:
四
五
2
19
一个
样例输出:
五
一个
181
一个
这里,如果我想先计算所有的,
如果
#包括牡蛎
#includecstdio
使用命名空间标准;
长长数组[1000000];
长长的未来
{
if (num==1 || num==2)
{
返回1;
}
其他
{
返回数组[num]=fut her(num-1)fut her(num-2);
}
}
int main()
{
数组[1]=1;
数组[2]=1;
fut her(1000000);
int t;
scanf(“% d”,t);
而(t -)
{
int n;
scanf ('%d ',n);
printf('%lld\n',array[n]00);
}
返回0;
}
使用递归会议
有点不对劲。使用循环代替:
#包括牡蛎
#includecstdio
使用命名空间标准;
长长数组[1000000];
int main()
{
数组[1]=1;
数组[2]=1;
for(int I=3;i=1000000(一)
{
array[I]=array[I-1]array[I-2];
数组[I]%=1000;
}
int t;
scanf(“% d”,t);
而(t -)
{
int num
scanf(“% d”,num);
printf ('%lld\n ',数组[num]);
}
返回0;
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/134431.html