下面是“JavaScript进阶练习及简单实例分析”的完整攻略。
JavaScript进阶练习
递归
递归是指函数调用自身的一种行为。在JavaScript中,递归经常用来解决一些复杂问题,比如搜索和排序等。
示例1:计算阶乘
以下代码演示了如何使用递归计算阶乘:
function factorial(n) {
if (n === 0) {
return 1;
}
return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出120
在上述代码中,我们定义了一个名为factorial
的函数,用来计算一个整数的阶乘。当n为0时,我们返回1,否则我们递归调用自身来计算n - 1的阶乘,并将其乘以n。
示例2:斐波那契数列
以下代码演示了如何使用递归生成斐波那契数列:
function fibonacci(n) {
if (n < 2) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
for (let i = 0; i < 10; i++) {
console.log(fibonacci(i));
}
在上述代码中,我们定义了一个名为fibonacci
的函数,用来生成斐波那契数列的第n项。当n小于2时,我们返回n本身,否则我们递归调用自身来计算前两项斐波那契数列的和。
动态规划
动态规划是指在解决一些复杂问题时,通过将大问题拆分成小问题来逐步解决的一种算法。在JavaScript中,动态规划经常用来解决最优化问题,比如最长公共子串和最长递增子序列等。
示例1:最长递增子序列
以下代码演示了如何使用动态规划来求解最长递增子序列:
function lis(arr) {
const dp = [1];
for (let i = 1; i < arr.length; i++) {
dp[i] = 1;
for (let j = 0; j < i; j++) {
if (arr[i] > arr[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
return Math.max(...dp);
}
console.log(lis([10, 9, 2, 5, 3, 7, 101, 18])); // 输出4
在上述代码中,我们定义了一个名为lis
的函数,它接受一个整数数组作为参数,并返回该数组中最长递增子序列的长度。我们使用了一个一维数组dp
来记录每个元素作为结尾的最长递增子序列的长度。然后,我们遍历整个数组,对于每个元素,我们再次遍历其之前的所有元素,并找出所有小于当前元素的元素,更新该元素作为结尾的最长递增子序列的长度。
示例2:最长公共子序列
以下代码演示了如何使用动态规划来求解最长公共子序列:
function lcs(s1, s2) {
const m = s1.length;
const n = s2.length;
const dp = [];
for (let i = 0; i < m + 1; i++) {
dp[i] = [];
for (let j = 0; j < n + 1; j++) {
if (i === 0 || j === 0) {
dp[i][j] = 0;
} else if (s1[i - 1] === s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
console.log(lcs('ABCD', 'ACBAD')); // 输出2
在上述代码中,我们定义了一个名为lcs
的函数,它接受两个字符串作为参数,并返回这两个字符串的最长公共子序列的长度。我们使用了一个二维数组dp
来记录两个字符串的所有前缀子串的最长公共子序列的长度。然后,我们遍历整个dp
数组,计算出每个子串的最长公共子序列的长度,并最终返回右下角元素的值。
简单实例分析
示例1:计算器应用
以下代码演示了如何使用JavaScript创建一个简单的计算器应用:
<!DOCTYPE html>
<html>
<head>
<title>Calculator</title>
<script>
function add() {
const num1 = parseFloat(document.getElementById('num1').value);
const num2 = parseFloat(document.getElementById('num2').value);
document.getElementById('result').innerHTML = num1 + num2;
}
function subtract() {
const num1 = parseFloat(document.getElementById('num1').value);
const num2 = parseFloat(document.getElementById('num2').value);
document.getElementById('result').innerHTML = num1 - num2;
}
function multiply() {
const num1 = parseFloat(document.getElementById('num1').value);
const num2 = parseFloat(document.getElementById('num2').value);
document.getElementById('result').innerHTML = num1 * num2;
}
function divide() {
const num1 = parseFloat(document.getElementById('num1').value);
const num2 = parseFloat(document.getElementById('num2').value);
document.getElementById('result').innerHTML = num1 / num2;
}
</script>
</head>
<body>
<h1>Calculator</h1>
<label>Number 1:</label>
<input type="number" id="num1"><br>
<label>Number 2:</label>
<input type="number" id="num2"><br>
<button onclick="add()">Add</button>
<button onclick="subtract()">Subtract</button>
<button onclick="multiply()">Multiply</button>
<button onclick="divide()">Divide</button>
<p>Result: <span id="result"></span></p>
</body>
</html>
在上述代码中,我们使用HTML和JavaScript来创建一个简单的计算器应用。我们使用了<input>
标签来接受用户输入的两个数字,并使用四个不同的函数来计算结果,并将结果显示在与<span>
标签相关联的DOM元素中。
示例2:图像轮播应用
以下代码演示了如何使用JavaScript创建一个简单的图像轮播应用:
<!DOCTYPE html>
<html>
<head>
<title>Image Carousel</title>
<script>
let currentImageIndex = 0;
function showImage() {
const images = document.querySelectorAll('.carousel-image');
for (let i = 0; i < images.length; i++) {
images[i].style.display = 'none';
}
currentImageIndex = (currentImageIndex + 1) % images.length;
images[currentImageIndex].style.display = 'block';
setTimeout(showImage, 3000);
}
</script>
<style>
.carousel-image {
display: none;
}
</style>
</head>
<body onload="showImage()">
<h1>Image Carousel</h1>
<img class="carousel-image" src="img/1.jpg">
<img class="carousel-image" src="img/2.jpg">
<img class="carousel-image" src="img/3.jpg">
</body>
</html>
在上述代码中,我们使用HTML和JavaScript来创建一个简单的图像轮播应用。我们使用了<img>
标签来显示三张不同的图片,并使用<style>
标签将图片的display
属性设置为none
,从而将图片隐藏。我们定义了一个名为showImage
的函数,这个函数会定时切换图片的显示状态,并最终形成图像轮播的效果。最后,我们在<body>
标签上使用onload
属性,将showImage
函数与页面的加载事件关联起来,使得页面加载完成后图片轮播即可开始。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript进阶练习及简单实例分析 - Python技术站