【问题标题】:Fibonacci Sequence with Matlab using Loops(Iteration)使用循环(迭代)的 Matlab 斐波那契数列
【发布时间】:2023-03-23 07:42:01
【问题描述】:

如何在 Matlab 中使用循环编写斐波那契函数?函数必须有两个输入。

输入: 1.一个数字开始序列 2.要返回的项数(必须是正整数(N))

输出:是斐波那契数列的 1xN 向量。

条件:如果首项为0或1,则第二项为1。对于任何其他数字,首项将与第二个数字重复。

谢谢

【问题讨论】:

  • “开始序列的数字”。根据定义,斐波那契数列以f0 = 0f1 = 1 开头。你能澄清一下“开始序列的数字”是什么意思吗?
  • 例如,如果函数的两个输入是 (0,6),则输出应该是 [0 1 1 2 3 5]。对于输入 (4,10),输出应为 [4 4 8 12 20 32 52 84 136 220]。
  • 如果两个输入是:(3,6)?输出会是[3 4 4 5 6 9]吗?
  • 对于 (3,6),输出应该是 [3 3 6 9 15 24]

标签: matlab loops iteration


【解决方案1】:

Fibonacci sequence的定义如下:

您的函数的规格相当奇怪,但仍然可行。首先,您需要检查初始项是 0 还是 1。如果是这种情况,则第二项将为 1。如果有其他情况,前两项将与初始项完全相同。你首先需要一堆if 语句....所以是这样的:

function out = fibonacci(initial_term, N)

    if initial_term == 0 || initial_term == 1
        second_num = 1;
    else
        second_num = initial_term;
    end

    if N == 1
        out = initial_term;
    elseif N == 2
        out = [initial_term second_num];
    else
        out = zeros(1,N);
        out(1:2) = [initial_term second_num];
        for idx = 3 : N
            out(idx) = out(idx-1) + out(idx-2);
        end
    end
end

第一个 if 语句检查第一个词是 0 还是 1。如果是,第二个数字将为 1。如果不是,第二个数字将与第一个词相同.

接下来,我们检查N 是什么。如果为 1,则只返回初始项。如果是 2,则返回初始项和第二项的数组。如果它更大,则创建一个大小为N 的输出数组,其中前两个元素像N = 2 一样被初始化,然后我们简单地循环并使用斐波那契递归公式来填充输出中的每个元素索引 3 及以后。

您也可以将for 循环编写为while 循环。请记住,while 循环不断迭代直到logical 条件while 循环检查变为false。因此,你会这样做:

out = zeros(1,N);
out(1:2) = [initial_term second_num];
idx = 3;
while idx <= N
    out(idx) = out(idx-1) + out(idx-2);
    idx = idx + 1;
end

示例调用

>> out = fibonacci(3, 6)

out =

     3     3     6     9    15    24

>> out = fibonacci(0, 6)

out =

     0     1     1     2     3     5

>> out = fibonacci(4, 10)

out =

     4     4     8    12    20    32    52    84   136   220

【讨论】:

  • 谢谢先生。顺便说一句,您会向没有编程经验的初学者推荐哪本书来学习 Matlab?
  • 你能解释一下循环部分吗?是否必须初始化所有循环?你如何到达循环的“数学”部分?出=零(1,N); out(1:2) = [initial_term second_num];对于 idx = 3 : N out(idx) = out(idx-1) + out(idx-2);结束
  • 这不是家庭作业。我刚刚学习在 Matlab 中编程,并从一本书开始,我逐章阅读并尝试回答问题以帮助我理解。
  • @timrow - 啊,我明白了。对于做出这种假设,我深表歉意!
  • 现在回答你的问题:(1) 当你使用for 循环时,你需要定义它从哪里开始循环到它结束的地方。在这种情况下,我从idx = 3 开始,因为前两项已经定义。 (2) 我首先定义一个零数组,它是N long。然后,我将这个数组中的前两个元素作为初始项和第二项。之后,我们从index = 3 开始,然后使用斐波那契公式完成剩下的工作。
猜你喜欢
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2016-02-19
  • 1970-01-01
  • 2013-02-09
  • 2015-04-30
相关资源
最近更新 更多