代码是一门艺术,键盘是我的画笔。
3.递归和迭代(循环就是一种迭代,迭代不仅仅是循环)
·求n!
递归方式:
n!---> 1 (n=1); n*(n-1)! (n>=1)
#include <stdio.h>
//n!-->递归方式
int fac(int n)
{
if (n <= 1)
return 1;
else
return n * fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("ret=%d\n", ret);
return 0;
}
迭代方式(非递归):
#include <stdio.h>
//n!-->迭代方式
int fac(int n)
{
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret *= i;
}
return ret;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("ret=%d\n", ret);
return 0;
}
·求第n个斐波那契数(不考虑溢出)
斐波那契数列:1 1 2 3 5 8 13 21 34 55 ……
即等于前两个数之和
递归方式(但是效率很低,数字越大运算时间越长):
Fib(n)(斐波那契数)---> 1 (n<=2); Fib(n-1)+Fib(n-2) (n>2)
#include <stdio.h>
//递归方式
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
迭代方式:
#include <stdio.h>
//迭代方式
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 0;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
标签:方式,迭代,递归,int,C语言,Fib,初识,程序设计,include
From: https://blog.csdn.net/2402_85207276/article/details/141333288