就是我想要求第k项的总和,累加思想不对呀?请问一下是我逻辑哪里出错了吗?
3条回答 默认 最新
- a5156520 2023-02-19 11:22关注
应该是第220和第221行代码那里,第k项的斐波那契值与前第一项斐波那契的值的使用了同一个变量,所以计算出现了错误,可以再使用一个变量存储第k项斐波那契的值;
然后前第1项和第2项斐波那契的的值仍使用f1和f2来单独存储,从而让程序思路更简洁一点;
再针对第1项和第2项的特殊情况可以使用if-else if语句来专门处理;
另外,如果需要计算比较大的斐波那契值,可以把各变量的数据类型改为long 或long long int,甚至double类型也是可以的。
修改如下:
参考链接:https://blog.csdn.net/pyh2358/article/details/105977440https://www.lddgo.net/math/fibonacci#include <stdio.h> int main(void){ int f1,f2,sum=0,k; f1=1; //第一项斐波那契的值 f2=1; //第二项斐波那契的值 int fn; //第n项斐波那契的值 scanf("%d",&k); // https://blog.csdn.net/pyh2358/article/details/105977440 // https://www.lddgo.net/math/fibonacci if(k==1){ // 求1项 fn=f1; // 第一项斐波那契的值 sum+=f1; //累加第一项斐波那契的值 printf("第%d项位为%d,前%d项的和为%d\n",k,fn,k,sum); }else if(k==2){ //求2项 fn=f2; //第二项斐波那契的值 sum+=f1; //累加第一项 sum+=f2; //累加第二项 printf("第%d项位为%d,前%d项的和为%d\n",k,fn,k,sum); }else{ // 求3项以上 sum+=f1+f2; //求3项以上的和,先累加前两项的和 for(int i=3;i<=k;i++){ fn=f1+f2; // 当前项数列的值为前两项的和 sum+=fn; // 累加当前项 // f1 f2 fn f1=f2; //前第1项f1的值赋值为第2项 f2=fn; //前第2项f2的值赋值为当前项fn的值,以便为下一项的值作计算准备 } printf("第%d项位为%d,前%d项的和为%d\n",k,fn,k,sum); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 stm32代码移植没反应
- ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
- ¥100 连续两帧图像高速减法
- ¥15 组策略中的计算机配置策略无法下发
- ¥15 如何绘制动力学系统的相图
- ¥15 对接wps接口实现获取元数据
- ¥20 给自己本科IT专业毕业的妹m找个实习工作
- ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
- ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
- ¥50 mac mini外接显示器 画质字体模糊