腾讯面试题:50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
分析题目:
到第一层只有一种情况上一阶即可即为1
到第二层有两种情况11和2
到第三层有111、12、21三种情况
到第四层有1111、121、112、22、211吴种情况
...
要到第50层要么从48层上两阶到达或者从49层上一阶到达
f(50)=f(49)+f(48)
同理:f(49)=f(48)+f(47)
归纳得通式
f(n)=f(n-1)+f(n-2) (n>=2)
解决递归:
1.找出递归终止的条件
2.找出递归关系式
#include<stdio.h>#include<stdlib.h>double calc_upstairs_recursion(int n) //值比较大所以使用double{ if(n==1)//找出递归终止条件 { return 1; } else if(n ==2) { return 2; } else { return calc_upstairs_recursion(n-1)+calc_upstairs_recursion(n-2);//找出递归关系条件 }}double calc_upstairs_loop(int n){ double *tmp =NULL; double sum = 0; int i; if(n<=2)www.2cto.com { return n; } tmp =(double *)malloc(sizeof(double)*n); tmp[0]= 1; tmp[1] = 2; for( i=2;i<n;i++) pre="" return="" sum="tmp[n-1];" void="">2.给定个数组:int a[10]= {1,2,3,4,5,6,7,8,9,10};使用递归来判断数组a是否为递增序列?</p><p> 1.找出递归终止的条件</p><p> 2.找出递归关系式</p>