码迷,mamicode.com
首页 > 其他好文 > 详细

递归调用问题

时间:2021-02-01 12:59:13      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   scanf   i++   return   ota   台阶   int   pre   print   

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).

递归调用问题

标签:class   scanf   i++   return   ota   台阶   int   pre   print   

原文地址:https://www.cnblogs.com/buxiu888/p/14110529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!