我正在尝试创建一个递归函数调用方法,该方法将打印Fibonacci,直到某个特定位置:
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
根据我的理解,fibonacci函数将被递归调用,直到传递给它的参数n的值为1。然后函数堆栈将相应回滚。所以当我从命令调用这个函数时:
>> fibonacci(4)
N的值为4,因此第9行执行如下:
9 f(4) = fibonacci(3) + fibonacci(2);
现在我相信,第一个斐波纳契(3)将被称为-因此再次对斐波纳契(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行递归调用fibonacci函数的参数。
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
fibonacci(4)错误: File: fibonacci.m Line: 5列: 12意外的MATLAB表达式。
为什么函数中的返回表达式会导致错误?
发布于 2014-03-06 11:04:04
试试这个:
function f = fibonacci(n)
if (n==1)
f= 1;
elseif (n == 2)
f = 2;
else
f = fibonacci(n-1) + fibonacci(n-2);
end
请注意,这也是一个递归(只计算每个n一次):
function f=fibonacci(n)
f=additive(n,1,2);
function a=additive(n,x0,x1)
if(n==1)
a=x0;
else
if(n==2)
a=x1;
else
a=additive(n-1,x1,x0+x1);
end
end
发布于 2014-03-06 11:00:41
如果你必须使用递归方法,试试这个-
function out = fibonacci(n)
fprintf('The valus is %d\n', n)
if (n==1)
out = 1;
return;
elseif (n == 2)
out = 2;
return;
else
out = fibonacci(n-1) + fibonacci(n-2);
end
return;
与C/C++不同的是,在MATLAB中,一个人不能返回一个值,但是只有控件可以返回调用函数。要返回到调用函数的输出将存储在函数开始时定义的输出变量中。
编辑1:用于整个斐波纳契系列,并假定该系列从1开始,请使用-
N = 16; %// Number of fibonacci numbers needed
all_nums = zeros(1,N);
all_nums(1) = 1;
for k = 2:N
all_nums(k) = fibonacci(k-1);
end
给予-
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
发布于 2017-04-10 19:40:53
为fibonacci函数创建一个M文件并编写代码,如下所示
function [ result ] = fibonacci( n )
if n==0|n==1
result = n;
else
result = fibonacci(n-2)+fibonacci(n-1);
end
end
在matlab的命令窗口中编写以下代码
for n = 0:10
fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n));
end
产出:-
Fibonacci(0)= 0
Fibonacci(1)= 1
Fibonacci(2)= 1
Fibonacci(3)= 2
Fibonacci(4)= 3
Fibonacci(5)= 5
Fibonacci(6)= 8
Fibonacci(7)= 13
Fibonacci(8)= 21
Fibonacci(9)= 34
Fibonacci(10)= 55
https://stackoverflow.com/questions/22222001
复制相似问题