首页 > 解决方案 > 有人可以准确解释这段代码中的 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,);

    }
}

标签: cloops

解决方案


斐波那契数列是一系列数字:[0, 1, ... ]通过将前面的两个数字相加来找到下一个数字。

0+1=1
1+1=2
2+1=3
3+2=5
5+3=8
...

变量初始化为:oneBack = 0twoBack = 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

...

ifibTerm是循环计数器,当计算的第 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);

推荐阅读