5、阶乘练习

阶乘

这一节是要完成一个阶乘的函数,定义一个名为factorial的函数,传递一个类型为u32的变量n,返回一个类型为u32的变量,定义好这个签名后就可以提交了

题目如下

// Define a function named `factorial` that, given a non-negative integer `n`,
// returns `n!`, the factorial of `n`.
//
// The factorial of `n` is defined as the product of all positive integers up to `n`.
// For example, `5!` (read "five factorial") is `5 * 4 * 3 * 2 * 1`, which is `120`.
// `0!` is defined to be `1`.
//
// We expect `factorial(0)` to return `1`, `factorial(1)` to return `1`,
// `factorial(2)` to return `2`, and so on.
//
// Use only what you learned! No loops yet, so you'll have to use recursion!

// 定义一个名为 factorial 的函数,该函数接收一个非负整数 n,并返回 n!,即 n 的阶乘。
//
// n 的阶乘定义为从 1 到 n 所有正整数的乘积。
// 例如,5!(读作“五的阶乘”)是 5 * 4 * 3 * 2 * 1,其结果为 120。
// 0! 被定义为 1。
//
// 我们预期 factorial(0) 返回 1,factorial(1) 返回 1,
// factorial(2) 返回 2,以此类推。
//
// 只能使用你学过的内容!目前还没有学习循环,因此你必须使用递归!

/* TODO */

image-20250829073208155

这不C/C++里讲递归的时候的经典函数吗,没什么难度,代码直接写了

fn factorial(n:u32)->u32{
	if n==0{
		1
	}
	else{
		n*factorial(n-1)
	}
}

但是代码却报错了…

一直通过不了

image-20250829073606388

image-20250829073626037

我寻思了半天,我就想,我这逻辑也没问题啊,哪里出问题了呢?

最后看了一下官方题解,才发现

image-20250829073717093

md,要加一个pub

怎么之前也没人告诉我捏,服了(

查资料发现了这俩的区别

fn foo() 私有函数 —— 只能在本模块内部调用
pub fn foo() 公有函数 —— 外部模块也可以调用

如果不加pub,那这就是一个私有函数,只能在本模块内部调用。

但是,这个模块具体指什么呢?通过查询资料可得,模块一般指这个文件,就是这个函数所在的文件,就是一个模块,或者同样在src目录下的同一个子文件夹里,也可以作为一个模块

阅读剩余
THE END