【发布时间】:2014-03-06 10:41:53
【问题描述】:
我正在尝试创建一个递归函数调用方法,该方法将打印斐波那契直到特定位置:
1 function f = fibonacci(n)
2 fprintf('The value is %d\n', n)
3 if (n==1)
4 f(1) = 1;
5 return;
6 elseif (n == 2)
7 f(2) = 2;
8 else
9 f(n) = fibonacci(n-1) + fibonacci(n-2);
10 end
11 end
根据我的理解,斐波那契函数将被递归调用,直到传递给它的参数 n 的值为 1。然后函数堆栈将相应地回滚。所以当我从命令调用这个函数时:
>> fibonacci(4)
n 的值为 4,所以第 9 行的执行如下:
9 f(4) = fibonacci(3) + fibonacci(2);
现在我相信第一个 fibonacci(3) 将被调用 - 因此再次调用 fibonacci(3)
9 if(3) = fibonacci(2) + fibonacci(1);
第 3 行和第 6 行中的 ifs 会很小心。
但是现在 fibonacci(2) + fibonacci(1) 语句将如何变为:
if(3) = 2 + 1;
我收到以下错误,无法进一步调试以解决它:
>> fibonacci(4)
The value is 4
The value is 3
The value is 2
The value is 1
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in fibonacci (line 9)
f(n) = fibonacci(n-1) + fibonacci(n-2);
Error in fibonacci (line 9)
f(n) = fibonacci(n-1) + fibonacci(n-2);
请提供一些解决方案的见解,以及首先在第 9 行递归调用斐波那契函数的参数。
例如 n = 4
f(n) = fibonacci(3) + fibonacci(2);
那么 MATLAB 会先调用 fibonacci(3) 还是 fibonacci(2)?
代码不应该像下面这样吗:
1 function f = fibonacci(n)
2 fprintf('The valus is %d\n', n)
3 if (n==1)
4 f(1) = 1;
5 return f(1);
6 elseif (n == 2)
7 f(2) = 2;
8 return f(2);
9 else
10 f(n) = fibonacci(n-1) + fibonacci(n-2);
11 end
12 end
斐波那契(4) 错误:文件:fibonacci.m 行:5 列:12 意外的 MATLAB 表达式。
为什么函数中的返回表达式会导致错误?
【问题讨论】:
-
我不是 MATLAB 专家,但看这里 mathworks.com/help/matlab/ref/return.html 它说返回已完成,在你的情况下,就像
f = 1而不是f(1)=1?我可能错了。 -
那么在我们的例子中,递归函数将返回什么值' f(4) = fibonacci(3) + fibonacci(2);'将导致返回语句执行后的结果
-
我认为你需要编辑“return f(1);”和“返回 f(2);” “返回;”。
-
如果我按照@Divakar 进行替换,仍然会出现同样的错误
-
我认为您需要将
f(1)=1;更改为f=1;和f(2)=2为f=2,并且还需要将return f(1)和return f(2)更改为return。最后f(n) = ...到f=...;