递归
//所有循环都可以用递归表示
//但某些递归不能用循环表示
#include<stdio.h>
// 有10级台阶,一次走1级或2级台阶,走完10级,共有多少种可能性
/*台阶数(x) 可能性 种数f(x)
1 1 1 f(1)=1
2 11,2 2 f(2)=2
3 111,21,12 3 f(3)=f(2)+f(1)=3
4 1111,22,112,211,121 5 f(4)=f(3)+f(2)=5
*/
int possibleRecursion(int num){
if (num ==1 ){
return 1;
}
else if (num ==2){
return 2;
}else{
return possibleRecursion(num - 1) + possibleRecursion(num - 2);
}
}
int possibleFor(int num){
int n1 = 1, n2 = 2,n3=0;
for (int i = 2; i < num;i++){
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
return n3;
}
int possibleArr(int num){
int a[50];
a[0] = 1;
a[1] = 2;
for (int i = 2; i < num;i++){
a[i] = a[i - 1] + a[i - 2];
}
return a[num -1];
}
void main(){
printf("%d\n", possibleRecursion(10));
printf("%d\n", possibleFor(10));
printf("%d\n", possibleArr(10));
getchar();
}
十进制转二进制 递归的方法
#include<stdio.h>
void converse(int a){ //
if(a == 0){ //别写成a=0,会形成死循环
return ;
}
else{
// printf("%d",a %2); //0101 先输出10%5的余数0,再往下调用converse(5) ....a==0 结束
converse(a /2);
printf("%d",a %2); //1010 先调用converse(5),再调用converse(2),最后调用converse(1),然后再逆向输出
}
}
void main(){
//十进制转换成二进制
converse(10);
}

浙公网安备 33010602011771号