递归调用问题
时间:2021-02-01 12:59:13
收藏:0
阅读:0
1.求n的阶乘
#include<stdio.h>
#include<stdlib.h>
//n的阶乘
int f(int n)
{
if(1==n)
{
return 1;
}
return n*f(n-1);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d!=%d\n",n,f(n));
}
system("pause");
}
关键是要推出递推公式f(n)=n*f(n-1).
2.假如有n个台阶,一次只能上1个台阶或者2个台阶,请问走到第n个台阶有几种走法?
递归解法:
#include<stdio.h>
#include<stdlib.h>
int step(int n)
{
if(1==n)
{
return 1;
}
if(2==n)
{
return 2;
}
return step(n-1)+step(n-2);
}
int main()
{
int i,n;
int first,second,total;
printf("请输入台阶数:");
while(scanf("%d",&n)!=EOF)
{
printf("第%d阶台阶有%d种走法\n",n,step(n));
}
system("pause");
}
非递归解法
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,n;
int first,second,total;
printf("请输入台阶数:");
while(scanf("%d",&n)!=EOF)
{
first=0;
second=1;
for(i=1; i<=n; i++)
{
total=first+second;
first=second;
second=total;
}
printf("%d!=%d\n",n,total);
}
system("pause");
}
这个主要是要学会该思想,f(n)=f(n-1)+f(n-2).
评论(0)