c - 有人可以准确解释这段代码中的 for 循环是如何工作的吗?
问题描述
此代码应该显示用户选择多少项的斐波那契数列。代码按预期工作,我只想有人解释这个代码块的 for 循环实际上是如何工作的。
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i, fibTerm, oneBack = 0, twoBack = 1, fibNum;
double ratio;
printf("How many fibonacci terms would you like to calculate?\n");
scanf("%d", &fibTerm);
for (i = 1; i <= fibTerm; i++)
{
fibNum = oneBack + twoBack;
twoBack = oneBack;
oneBack = fibNum;
printf("f(%d) = %d. The ratio is %lf\n", i, fibNum,);
}
}
解决方案
斐波那契数列是一系列数字:[0, 1, ... ]
通过将前面的两个数字相加来找到下一个数字。
0+1=1
1+1=2
2+1=3
3+2=5
5+3=8
...
变量初始化为:oneBack = 0
和twoBack = 1
。所以每次通过循环:
fibNum = oneBack + twoBack; // = 0+1=1
twoBack = oneBack; // = 0
oneBack = fibNum; // = 1
fibNum = oneBack + twoBack; // = 1+0=1
twoBack = oneBack; // = 1
oneBack = fibNum; // = 1
fibNum = oneBack + twoBack; // = 1+1=2
twoBack = oneBack; // = 1
oneBack = fibNum; // = 2
fibNum = oneBack + twoBack; // = 2+1=3
twoBack = oneBack; // = 2
oneBack = fibNum; // = 3
fibNum = oneBack + twoBack; // = 3+2=5
twoBack = oneBack; // = 3
oneBack = fibNum; // = 5
fibNum = oneBack + twoBack; // = 5+3=8
twoBack = oneBack; // = 5
oneBack = fibNum; // = 8
fibNum = oneBack + twoBack; // = 8+5=13
twoBack = oneBack; // = 5
oneBack = fibNum; // = 13
...
i
fibTerm
是循环计数器,当计算的第 i 项是第th时停止计算。
你的代码有一个无关的格式说明符和逗号,所以它不应该编译。
printf("f(%d) = %d. The ratio is %lf\n", i, fibNum,);
你可能的意思是:
ratio = oneBack / fibNum;
printf("f(%d) = %d. The ratio is %lf\n", i, fibNum, ratio);
推荐阅读
- intellij-idea - 无法执行目标 net.alchim31.maven:scala-maven-plugin:3.2.0:compile (scala-compile)
- javascript - node.js 使用两个具有不同端口的套接字
- identityserver4 - Identity Server 4 注册后自动登录不起作用
- java - Firebase 数据库从子 android 访问节点
- c++ - 我怎样才能使这个程序显示键入的数字与数字的值一样多次?
- java - CompletableFuture - 异步任务执行是错误的?
- java - 在 JavaFx 中禁用键盘快捷键
- gradle - 如何通过 gradle 设置 git hook 可执行文件
- ios - 如何在 swift 4 中使用 UIImagePickerController
- javascript - 使用 P-Queue 节点模块排队 Promise