C语言一个简单递归的实现

C语言一个简单递归的实现

问题的引入

在初中或高中数学问题中会遇到这样的问题,已知f(0) = 1,f(n) = f(n-1)+n (n>=0 且为正整数);求f(3)或放f(n),这样的问题。这实质上就是一个递归问题。
解法如下:
f(3) = f(2) + 3 要求f(3),需要f(2)
f(2) = f(1) + 2 同理f(1)
f(1) = f(0) +1 已知
f(0) = 1
==>f(0) ==>f(1) =>f(2) ==>f(3) = 7
同理f(n)。

c语言实现


下面展示一些 内联代码片


#include <stdio.h>

static int recursion(int n)
{
	int ret;
	if(n == 0)
		return 1;
	else{
		ret = recursion(n-1)+ n;
		n--;
		return ret;
	}
}
int main(void)
{
	printf("recursion(3)=%d\n",recursion(3));
	return 0;
}

编译运行结果如下

recursion(3)=7

阶乘的定义&实现

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
亦即n!=1×2×3×…×(n-1)n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
代码实现


#include <stdio.h>
#include <stdlib.h>

static int recursion(int n)
{
	int ret;
	if(n == 0)
		return 1;
	else{
		ret = recursion(n-1)*n;
		n--;
		return ret;
	}
}
int main(int argc ,char *argv[])
{ 
	if(argc < 2){
		printf("please enter a number (n!)\n");
		return -1;
	}

	printf("recursion(%s)=%d\n",argv[1],recursion( (atoi(argv[1]))));
	return 0;
}

输入参数5得到
recursion(5)=120

以上就是对递归的简单认知和功能代码的基本实现,如有不正确的地方欢迎指正!

猜你喜欢

转载自blog.csdn.net/HC_huangcheng/article/details/103766431