一、一个台阶总共有n级,如果一次可以跳1级,也可以跳2级...,也可以跳上n级,此时跳上一个n级的台阶总共有多少种跳法
递归函数的返回值,2*f(n-1),是数学归纳出来的
f(n) = f(n-1) + f(n-2) + … + f(n-(n-1)) + f(n-n); 即, f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1); 得出,f(n-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2); 替换,f(n) = f(n-1) + f(n-1); f(n) = 2*f(n-1);
c语言,递归代码
int f(int n) { if(n==0) return 0; else if(n==1) return 1; else return 2*f(n-1); }
二、递归折半查找
#include<stdio.h> //递归折半查找 int find(int a[],int x,int n,int m){ int i; //未找到 if(n>m){ return -1; } //折半 i=(n+m)/2; //找到了 if(a[i]==x){ return i; } //向左查找 if(a[i]>x){ return find(a,x,n,i-1); } //向右查找 return find(a,x,i+1,m); } int main(){ //折半查找的前提是,数据是有序的 int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51}; int x,i; printf("已有的数是:\n"); for(i=0;i<20;i++) printf("%d ",a[i]); printf("\n请输入要查找的数:"); scanf("%d",&x); if((i=find(a,x,0,19))>=0) //找到了 printf("%d是第%d个数\n",x,i+1); //下标是从0开始的 else //未找到 printf("未找到%d\n",x); return 0; }