1.n的阶乘
//一递归、
#include <stdio.h>
#include <string.h>
int fac(int n){
if(n<=1)
return 1;
else
return n*fac(n-1);
}
int main(){
int n=0;
printf("请输入要计算n的阶乘中n的值:");
scanf("%d",&n);
int ret=fac(n);
printf("%d的阶乘为%d",n,ret);
return 0;
}
//二、迭代(循环)
#include <stdio.h>
#include <string.h>
int fac(int n){
int ret=1;
for(int i=n;i>=1;i--){
ret=ret*i;
}
return ret;
}
int main(){
int n=0;
printf("请输入要计算n的阶乘中n的值:");
scanf("%d",&n);
int ret=fac(n);
printf("%d的阶乘为%d",n,ret);
return 0;
}
2.斐波那契数列(不考虑溢出现象)
(1 1 2 3 5…………前两位都为1,从第三位开始,都等于前两位之和)
//一递归、
#include <stdio.h>
#include <string.h>
int Fib(int n){
if(n<=2)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
int main(){
int n=0;
printf("请输入要计算斐波那契数列的第几位:");
scanf("%d",&n);
int ret=Fib(n);
printf("斐波那契数列的第%d位为%d",n,ret);
return 0;
}
二、迭代(循环)计算速度快 ,但是容易发生溢出现象
#include <stdio.h>
#include <string.h>
int Fib(int n)
{
int a=1;//第一位数
int b=1;//第二位数
int c=1;//令c为1,因为当n小于3时,返回都为1
while(n>=3){
c=a+b;//第三位数
a=b;//让第一位数等于第二位,依次推
b=c;
n--;
}
return c;
}
int main(){
int n=0;
printf("请输入要计算斐波那契数列的第几位:");
scanf("%d",&n);
int ret=Fib(n);
printf("斐波那契数列的第%d位为%d",n,ret);
return 0;
}