递归相关的的两道面试题 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    腾讯面试题: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>

   

最新文章