【Day 30】递回

最後一天,我想要用递回(Recursion)来结束我们的三十天!
递回的观念,其实就是让一个函式可以呼叫自己以方便做一些运算。
还记得我们在前面写过一个作业在写阶乘吗?那时候我们用for 回圈去做,那时候其实是用迭代(Iteration)的想法去做。
今天,我们利用递回再写一次阶乘!

先上程序码:

#include<stdio.h>
int factorial(int n){
	if(n==1)
		return 1;
	else
		return n * factorial(n-1);
	
}
int main(){
	int number;
	printf("Please input a number A >>");
	scanf("%d", &number);
	printf("A! = %d", factorial(number));
	return 0; 
}

输出结果:

我先把参考图放上来,等等再解释程序码(为方便讲解,参考图是假设现在输入为 3):

程序码解说:

  • 第一眼看到程序码时,可能会有眼尖的读者发现一件事:为甚麽这个程序的函式不用宣告呢?其实,只要把函式放在主程序 main() 的上面,就可以不用宣告函式!
  • 我们先写一个阶乘的函式 factorial(),里面的程序码用 if 判断,如果传入参数 n 等於 1 ,就返回 1 ,若不是,则返回 n * factorial(n-1),而因为返回值里面又去呼叫自身函数,所以其实只要 n 不等於 1 ,就会一直呼叫函数直到 n 的值为 1 为止,利用这个特性,我们就能计算阶乘。不懂的读者可以看上面附图,不过那张图为了方便解释,是假设现在 n=3!
  • 阶乘函式写完,只要在主程序写输出函式 printf(),并呼叫我们写的函式,就可以输出我们要的答案了!

其实,函式与递回观念对以前的我来说,不是一个容易理解的东西!但多想、多写就会越来越了解喔!
今天是轻松学 C 语言的第 30 天,我的分享也告一段落了,希望这些文章可以帮助到需要的读者!


<<:  day30_arm 还是 x86? 我知道该怎麽选了

>>:  29 - Hygen - 程序码产生器

[Day19]The Decoder

上一篇介绍了Tell me the frequencies!,ASCII CODE码来表示总共出现那...

[Flutter ] 为Flutter 建立 Django 资料库

version: python 3.8.3 django 3.2.4 建立名为 NOTES,APP名...

[从0到1] C#小乳牛 练成基础程序逻辑 Day 9 - 运算子Demo 程序码演示

实码演示 | 算术-数值 | 逻辑-T/F | 递增递减 | 前置後置 🐄点此填写今日份随堂测验 ...

Day 18-更改 state 有其风险,State manipulation 有赚有赔(?),更改前应详阅官方文件说明书

更改 state 有其风险,State manipulation 有赚有赔(?),更改前应详阅官方文...

网拍的创业回亿:管理与经营(一)

我很重视客户的意见与收货速度。 当时我是网路拍卖的创办人,与客户约定好了要五天内到货。为了达成目标,...