帮我做一个题目,c语言的Fibonacci斐波那契数列 c语言

来 自:流年
等 级:版主
帖 子:552
专家分:1808
f[n]从哪来的,你定义了这个数组?
一片落叶掉进了回忆的流年。
等 级:新手上路
回复 2楼 诸葛欧阳
int *f=new int[n];&&&这样是错的?
来 自:流年
等 级:版主
帖 子:552
专家分:1808
你觉得很对?
一片落叶掉进了回忆的流年。
来 自:图灵学院
等 级:业余侠客
帖 子:96
专家分:255
n都还没值,细心点,小伙子
别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
等 级:黑侠
帖 子:326
专家分:608
其实你应该是到C++那边问这个问题,以及问以后如何学习C++,而不是在这里问这个问题还问一句如何学习C。你写的是C++的代码
等 级:新手上路
回复 4楼 诸葛欧阳
没有。。。如你所见我连最基本的东西都没搞懂。或许应该自己查书而不是来论坛。
等 级:新手上路
回复 6楼 八画小子
恩恩谢谢你
等 级:新手上路
回复 5楼 lovegh
其实是我不知道要不要赋值该怎样赋值,太弱。谢谢您。
等 级:新手上路
大家都好犀利。。我还是结了帖子闭关去了。
版权所有,并保留所有权利。
Powered by , Processed in 0.029469 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言高手进 关于使用数组解决fibonacci数列的的一个题目_百度知道
C语言高手进 关于使用数组解决fibonacci数列的的一个题目
f[i];;for(i=2;n&i++){if(i%4==0) printf(&%6d&i++)
f[1]=f[i-20]+f[i-1];\printf(&i&);20;sattic int[20]={1;)}这里我有一个问题 for循环不应该是一个一个的执行么 按照上面的写法 应该是把第一个 for循环全部结束了 才进行第二个for 循环这样
这样在执行第二个for循环的时候 不是输入的 只有f[19]的值了么;i&for(i=0,1}main(){20?
程序没错 这个for循环的先后我没法理解 谁能给解释下
提问者采纳
if(i%4==0) printf(&20;),f[0];i++)
{f[i]=f[i-2]+f[i-1];n&%6d%6d&\,n=2;;
for(i=2,f[1]);
static int f[20]={1main(){i&lt,f[i])
提问者评价
其他类似问题
fibonacci的相关知识
其他1条回答
ain(){ int a[20]={1;i++) a[i]=a[i-2]+a[i-1];i&i&20,1};for(i=2;20;for(i=0
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求教一个关于斐波那契数列的C语言问题_百度知道
求教一个关于斐波那契数列的C语言问题
说得好的话我还加分,f1,f2;i&f2=1,f2);i++)
printf(&quotvoid main(){
long int f1;&#92?如果把第二句换成f2=f1+f2这样合法吗;
f1=f1+f2;%12ld %12ld&;)?谢谢;
for(i=1;=20;
} }中的f1=f1+f2和f2=f2+f1两语句到底是什么意思啊?有什么用啊;
if(i%2==0)printf(&
提问者采纳
这两句不能对调,两个值一直这样递增上去一样的,第二句改变了f2的值。呵呵。第一句改变了f1的值; 和f2=f1+f2。但是f1=f1+f2。合法
提问者评价
是很经典,我是这样理解的,相当于m=m+n和n=n+m
其他类似问题
斐波那契数列的相关知识
其他2条回答
合法啊初始状态f1=f1+f2就相当于求出了费波纳锲数列的第三个元素的值(也就是第一个元素+第二个元素),f2=f1+f2相当于求出了第四个元素的值(第二个元素+第三个元素),这样以此类推,第五个元素第六个元素被依次求出
=应理解为赋值符号,而不是等于符号(逻辑等于符号是==)f1=f1+f2 就是把f1+f2的值赋值给f1f2=f2+f1 同理f1+f2==f2+f1 所以f2=f2+f1和f2=f1+f2是一个意思程序是:1. 先将f1和f2初始化为1(即fibo数列中第一个和第二个数)2. 然后进入循环,输出 1 1 之后3. 判断i除以2的余数是不是等于0,是的话就换行,此步骤用来进行格式控制,即输出了4个数后换行(i每次增加后输出2个数)4. 然后让f1=f1+f2, f2=f2+f1即让:后来的f1=原来的f1+原来的f2(f1=1+1 =2)后来的f2=原来的f2+后来的f1(f2=1+2 =3)5. 然后进入下次循环,输出 2 3 后回到第3步继续做直到i&=20不满足为止
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Posts - 84,
Articles - 0,
Comments - 303
22:44 by cnyao, ... 阅读,
102{11235}&&&1&#include&&iostream&&2&using&namespace&&3&&4&int&f(int&n)&5&{&6&&&&&if&(n==1&||&n==0)&7&&&&&{&8&&&&&&&&&return&1;&9&&&&&}10&&&&&else11&&&&&{12&&&&&&&&&return&f(n-2)+f(n-1);13&&&&&}14&}15&16&int&main()17&{18&&&&&cout&&f(9)&&19&20&&&&&return&0;21&}22&由于递归式比较简单,所以这个程序也就没有什么好说的。但是关于斐波那契,还是有不少内容来探讨。斐波那契数列最初出现是计算兔子的数目,所以又被称为“兔子数列”,所以看到农夫养牛等问题,还是可以联系上的。&关于斐波那契的讨论,主要集中在对其的优化,以及其扩展题目上,递归已经由只有一项在变,变成两项在变了。其扩展的题目,如何得到递归式,如何透过现象来将递归式写出来,才是真正的要点。包括农夫养牛问题,爬楼梯问题,打靶问题等等,应该算起来都算是斐波那契问题的一些扩展。【扩展】110?n老外喜欢养牛,在很多题目中都可以看到奶牛还是什么牛的身影。这道题目的网址为:而前段时间园子中有兄弟已经详细探讨了这个问题。&关于这个问题,其实一开始遇到是使用模拟的思路去想的,而且想得比较的糊涂,因为牛生下来之后,并不是马上就可以生小牛,是在三年后,每年生一头牛,那假设某一年,就有能生小牛的,还有一年生小牛的,还有两年生小牛的,然后就自己把自己绕住了。但是,其实没有这么复杂,就是将其分为能生小牛的和不能生小牛的。从而得到:=+
f(n)=f(n-1)+f(n-3)这里f(n-2)
f(n) 看了一下题目,应该是三年后,那就应该是n-3。&代码如下:&1&#include&&iostream&&2&using&namespace&&3&&4&int&Fibonacci(int&n)&5&{&6&&&&&if&(n==1&||&n==2&||&n==3)&7&&&&&{&8&&&&&&&&&return&1;&9&&&&&}10&&&&&return&Fibonacci(n-1)+Fibonacci(n-3);11&}12&13&int&main()14&{15&&&&&cout&&Fibonacci(10+1)&&16&}这里输入参数为n+1,是因为是n年后的数目,所以需要加1。这道题目,也可以使用数组将运算的结果保存下来,然后直接进行计算,这就是常说的动态规划。代码如下:&&1&int&Fibonacci2(int&n)&2&{&3&&&&&int&*num=new&int[n];&4&&&&&num[0]=num[1]=num[2]=1;&5&&&&&for&(int&i=3;i&n;i++)&6&&&&&{&7&&&&&&&&&num[i]=num[i-1]+num[i-3];&8&&&&&}&9&&&&&int&ret=num[n-1];10&&&&&delete&[]11&&&&&return&12&}13&14&int&main()15&{16&&&&&cout&&Fibonacci2(10+1)&&17&}上面的程序使用了n个的数组来存,但是其实并不需要,只需要3个数参与运算即可。&而园子中的兄弟在这个基础上又做了两个扩展,一个是将特殊一般化,也就是不单单是3年,如果是m年呢?如果m年则得到f(n)=f(n-1)+f(n-m)&同时这里的牛只有生没有死,那加上到了一定的时间牛就会死呢?假设牛到了第8年就挂了。那就可以得到f(n)=f(n-1)+f(n-3)-f(n-8)2. 打靶问题:0100101089可以得到f(n)=x+f(n-1)x0-10所以我们需要去做一个变化的x,其实也就是一个循环来得到。89+110
&1&#include&&iostream&&2&using&namespace&&3&&4&int&&5&int&store[10];&6&&7&&8&void&getscore(int&sum,&int&n)&9&{10&&&&&if(sum&0&||&sum+(n+1)*10&89&||&sum&89)11&&&&&&&&&return;12&&&&&if(n==0)13&&&&&{14&&&&&&&&&//check&the&number15&&&&&&&&&if(sum==89)16&&&&&&&&&{17&&&&&&&&&&&&&for(int&i=0;i&10;i++)18&&&&&&&&&&&&&&&&&cout&&store[i]&&"&";19&&&&&&&&&&&&&cout&&20&&&&&&&&&&&&&countresult++;21&&&&&&&&&}22&&&&&&&&&return;23&&&&&}24&&&&&for(int&i=0;i&=10;i++)25&&&&&{26&&&&&&&&&store[10-n]=i;27&&&&&&&&&getscore(sum+i,n-1);28&&&&&}29&}30&31&int&main()32&{33&&&&&getscore(0,10);34&&&&&cout&&"总数"&&countresult&&35&&&&&return&0;36&}注意上面的代码,其实上面还是应用了递归中常使用的一种做法--剪枝。上面的代码并不太好,比较好的是下面的代码,但是两种方法作出的值是一样的。&1&#include&&iostream&&2&using&namespace&&3&&4&int&&5&int&store[10];&6&&7&void&Output()&8&{&9&&&&&for(int&i&=&9;&i&=0;&--i)10&&&&&{11&&&&&&&&cout&&store[i]&&"&";12&&&&&}13&&&&cout&&14&&&&&++15&}16&17&void&Cumput(int&score,&int&num)18&{19&&&&if(score&&&0&||&score&&&(num+1)*10&)&//次数num为0~920&&&&&&&return;21&&&&if(num&==&0)&22&&&&{23&&&&&&&&store[num]&=&24&&&&&&&&Output();25&&&&&&&&return;26&&&&}27&&&&for(int&i&=&0;&i&&=&10;&++i)28&&&&{29&&&&&&&&store[num]&=&i;30&&&&&&&&Cumput(score&-&i,&num&-&1);31&&&&}32&}33&34&int&main(int&argc,&char*&argv[])35&{36&&&&&Cumput(89,&9);37&&&&&cout&&"总数:"&&sum&&38&&&&&return&0;39&}上面代码参考:&其实这里的话题很广,涉及到具体的各种优化,如何提高执行的时间(当然,前提是要保证结果的正确性),不过对于算法这个还是了解不深啊,大家可以看看这些,给些意见。&3. 爬楼梯问题:一个N级的楼梯,一个人每次可以爬一级,也可以爬两级,问如果给定一个N要求输出所有的爬楼方法,并统计出方法数 。可以思考,在第n级的时候,可以通过f(n-1)爬1级得到,也可以通过f(n-2)爬两级得到,如果f(n-2)爬1级,也就是又到f(n-1),其实是涵盖在前面一种情况下的。所以得到递归公式: f(n)=f(n-1)+f(n-2),很明显,得到递归公式后,就是斐波那契数列。再扩展,如果每次可以爬一级,也可以爬两级,也可以爬三级。那此时递归公式怎么推?此时就要加上f(n-3)的情况,而f(n-3)上面爬2级,爬1级,又回到f(n-2)或者f(n-1),所以得到递归式为f(n)=f(n-1)+f(n-2)+f(n-3)&关于斐波那契的类似问题很多,但是如何思考得到递归式是重点,当得到正确的递归式后,就明白是斐波那契,那就能够直接使用斐波那契相关的方法来做该问题了。&&最后有一道思考题,是概率题:一副52张的牌(去掉大小鬼),4张A排在一起的概率是多少?为了避免误解题意,将原题也放在这里 (A deck of 52 cards is shuffled thoroughly. What is the probability that the 4 aces are all next to each other?)从中选择:(a) 4!49!/52!(b) 1/52!(c) 4!/52!(d) 4!48!/52!(e) 都不是(f) 是未知的大家看看是选哪个结果呢?

我要回帖

更多关于 fibonacci数列 的文章

 

随机推荐