我正在尝试(但失败)使用递归打印斐波那契序列。我确信这是非常基本的,但是我似乎无法理解。 请告诉我我在做什么错,谢谢!
#include <stdio.h>
int fib(int a, int i)
{
int nextnum, num1 = nextnum - 1, num2 = nextnum - 2;
for (i = 0; i >= a; i++) {
nextnum = num1 + num2;
printf("%d", nextnum);
i++;
fib(a, i);
}
}
int main(void)
{
int a, i = 0;
printf("Enter a number for fib series: ");
scanf("%d", &a);
if (a == 1 || a == 2) {
printf("Enter higher number please!\n");
}
else {
fib(a, i);
}
}
答案 0 :(得分:2)
斐波纳契数通常被用作递归的介绍,因为它们是自然递归的。实际上,以任何语言递归地实现它们都是微不足道的。附带说明,通常不是出于实际目的实施斐波那契数列的最佳方法。
根据定义,Fib(X)= Fib(X-1)+ Fib(X-2)。这是递归。唯一缺少的是我们如何停止递归,并且我们知道Fib(0)与Fib(1)相同且为1。
我们如何将其翻译为C语言?非常简单,几乎是一对一的映射!
unsigned int fib(unsigned int k) {
// First, check our exit (stop) conditions:
if (k == 0 || k == 1) return 1;
// Now recursive part
return fib(k - 1) + fib(k - 2);
}
答案 1 :(得分:1)
几乎每个递归函数都包含两部分:特定部分,然后是递归部分。
因此要编写此函数,您的算法将如下所示
if (condition_separate_particular_part)
{
//here the code for part
}
else
{
//the recursive part
}
现在要确定递归部分,您将尝试找到如何使用其前身元素“ i-1”,“ i-2” ...来解释元素“ i”。
像这样,每次您都会很容易。
请注意,有时候找到开始迭代的方式对自己轻松很有用。
我很确定你是新来的,所以这就是为什么你感到迷路了。但是相信我,如果您多运动,很快就会养成习惯。试试看,你会看到的。 ;)。
如果您在查找更多练习/示例时遇到困难,请告诉我。我会尽力帮助您:)。
Here是和示例。只需在C上键入带有用于递归函数的解决方案的“锻炼”,您就会发现有很多要锻炼的;)。
现在这里既是递归代码又是迭代代码
递归
int fib(int n){
if (n < 2) // here is particular case
return n;
else // here is the recursion
return fib(n-1) + fib(n-2);
}
printf("%d\n", fib(10));
迭代
int fib(int n) {
int first = 0, second = 1;
int tmp;
while (n--) {
tmp = first+second;
first = second;
second = tmp;
}
return first;
}