递归与迭代
求n的阶乘。(不考虑溢出)
int Fac1(int n)
{
int i=0;
int ret=1;
for(i=1;i<=n;i++)
{
ret*=i;
}
return ret;
}
int main(){
//求n的阶乘
int n=0;
int ret=0;
scanf("%d",&n);
ret=Fac1(n);
printf("%d\n",ret);
return 0;
}
int Fac2(int n)
{
if(n<=1)
return 1;
else
return n*Fac2(n-1);
}
int main(){
//求n的阶乘
int n=0;
int ret=0;
scanf("%d",&n);
ret=Fac2(n);
printf("%d\n",ret);
return 0;
}
斐波那契数列
1 1 2 3 5 8 13 21 34 55 ......
//
int count=0;
int Fib(int n){
if(n==3)//从第三个开始计算多少个数
{
count++;
}
if(n<=2){
return 1;
}
else
return Fib(n-1)+Fib(n-2);
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
//TDD -测试驱动开发
ret=Fib(n);
printf("ret=%d\n",ret);
printf("count=%d\n",count);
return 0;
}
算出第46个数字需要计算7亿次,多磨夸张吧
int Fib(int n){
int a=1;
int b=1;
int c=1;
while(n>2){
c=a+b;
a=b;
b=c;
n--;
}
return c;
}
int main(){
int n=0;
int ret=0;
scanf("%d",&n);
ret =Fib(n);
printf("ret=%d\n",ret);
return 0;
}
第50个是负数
void test(int n)
{
if(n<10000)
{
test(n+1);
}
}
int main()
{test(1);
return 0;
}
自己研究汉诺塔问题
青蛙跳台阶
n个台阶
1次可以跳1个台阶
1次也可以跳2个台阶
这只青蛙要跳第n个台阶,有多少种跳法。