递归

 

 

 

//所有循环都可以用递归表示
//但某些递归不能用循环表示

#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);

}

 

posted @ 2019-07-28 21:45  Coding_Changes_LIfe  阅读(99)  评论(0编辑  收藏  举报