递归与迭代
求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;elsereturn 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个台阶,有多少种跳法。