我正在尝试创建一个递归函数调用方法,将斐波那契打印到特定位置:
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会照顾。
但现在斐波那契(2)+斐波那契(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)还是斐波那契(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表达式。
为什么在函数中返回表达式会导致错误?
答案 0 :(得分:2)
试试这个:
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
答案 1 :(得分:1)
如果你必须使用递归方法,试试这个 -
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 ++不同,在带有'return'的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
答案 2 :(得分:0)
为斐波那契函数创建一个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
答案 3 :(得分:0)
Create a function, which returns Integer:
func fibonacci(number n : Int) -> Int
{
guard n > 1 else {return n}
return fibonacci(number: n-1) + fibonacci(number: n-2)
}
This will return the fibonacci output of n numbers, To print the series You can use this function like this in swift:
for _ in 0...10
{
print(fibonacci(number : 10))
}
It will print the series of 10 numbers.