编写两个函数,分别求两个数列的第N项的值,请在主函数中使用指向函数的指针调用这两个函数,以实现接口的一致性。这两个数列的数学表达分别是:① f(0)=1,f(1)=2,f(n)=2*f(n-1)+f(n-2) ②f(0)=0,f(1)=1,f(n)=f(n-1)+2*f(n-2)
两个表达式分别用两个递归函数来实现。
所以,题目中两个表达式的描述,就是告诉你不同情况下的函数返回值。
之后根据题意,主函数通过函数指针调用,函数指针就是指向函数的指针。把两个函数分别赋值给指针,再通过指针调用函数。
下面是代码:
#include <stdio.h>
int fn1(int n);
int fn2(int n);
int main()
{
int k=3,n=-1,(*p)(int n);
while(n<0)
printf("请输入n的值(大于等于0):"),scanf("%d",&n);
while(k!=1 && k!=2)
printf("请选择表达式(输入1或者2):"),scanf("%d",&k);
switch(k)
{
case 1:p=fn1;break;
case 2:p=fn2;break;
}
printf("通过表示式%d计算得第N项值为:%d\n",k,p(n));
return 0;
}
int fn1(int n)
{
if(n==0) return 1;
if(n==1) return 2;
return 2*fn1(n-1)+fn1(n-2);
}
int fn2(int n)
{
if(n==0) return 0;
if(n==1) return 1;
return fn2(n-1)+2*fn2(n-2);
}