1、问题
实现阶乘和斐波那契数(递归和非递归)
2、代码实现
#include <stdio.h>
int num = 0;
//递归实现斐波那契数
// n <=2, f(n) = 1, n > 2 f(n) = f(n - 1) + f();
long fibonacci(int n)
{
//计算fibonacci(3)计算了多少次
if (n == 3)
num++;
if (n <= 2)
{
printf("num is %d\n", num);
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
//非递归实现斐波那契数
long fibonacci1(int n)
{
long result = 1, pre_result = 1, next_pre_result;
while (n > 2)
{
n -= 1;
next_pre_result = pre_result;
pre_result = result;
result = pre_result + next_pre_result;
}
return result;
}
//递归实现n的阶乘
//n <= 1, f(n) = 1, n > 1 f(n) = n * f(n - 1);
long factorial(int n)
{
if (n == 1)
return 1;
return n * factorial(n - 1);