递归
//所有循环都可以用递归表示 //但某些递归不能用循环表示 #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); }