编辑代码

function calStepMethods(stairCount){
	if(stairCount < 1){
		return 0
	}
	
	if(stairCount === 1){
		return 1
	}
	
	if(stairCount === 2){
		return 2
	}
	
	return calStepMethods(stairCount - 1) + calStepMethods(stairCount - 2)
}

function calStepMethods2(stairCount){
	if(stairCount < 1){
		return 0
	}
	
	if(stairCount === 1){
		return 1
	}
	
	if(stairCount === 2){
		return 2
	}
	
	let step = 0
	let preStep = 2
	let prePreStep = 1
	let stairStepped = 3
	for (; stairStepped < stairCount + 1; ++stairStepped) {
		step = prePreStep + preStep
		prePreStep = preStep
		preStep = step
	}
	return step
}

console.log('---台阶问题递归---');
console.log('台阶问题',calStepMethods(1));
console.log('台阶问题',calStepMethods(4));
console.log('台阶问题',calStepMethods(6));
console.log('---台阶问题递推---');
console.log('台阶问题',calStepMethods2(1));
console.log('台阶问题',calStepMethods2(4));
console.log('台阶问题',calStepMethods2(6));


function factorialRecursive(n) {
	if (n === 0) {
		return 1;
	} else {
		return n * factorialRecursive(n - 1);
	}
}

function factorialRecursive2(n) {
	let result = 1;
	for (let i = 1; i <= n; i++) {
		result *= i;
	}
	return result;
}

console.log('---阶乘问题递归---');
console.log(factorialRecursive(3));
console.log(factorialRecursive(4));
console.log(factorialRecursive(5));
console.log('---阶乘问题递推');
console.log(factorialRecursive2(3));
console.log(factorialRecursive2(4));
console.log(factorialRecursive2(5));

function fibonacciRecursive(n){
	if (n <= 1) {
		return n;
	} else {
		return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
	}
}
function fibonacciRecursive2(n){
	if (n <= 1) {
		return n;
	}
	
	let prev = 0;
	let current = 1;
	for (let i = 2; i <= n; i++) {
		const temp = current;
		current = prev + current;
		prev = temp;
	}
	
	return current;
}
console.log('---斐波那契递归---');
console.log(fibonacciRecursive(3));
console.log(fibonacciRecursive(4));
console.log(fibonacciRecursive(5));

console.log('---斐波那契递推---');
console.log(fibonacciRecursive2(3));
console.log(fibonacciRecursive2(4));
console.log(fibonacciRecursive2(5));
			

function isPalindromebyStep(str){
	if(str.length<=1){
		return true
	}
	let firstStr = str[0]
	let lastStr = str[str.length - 1]
	if(firstStr === lastStr){
		let subStr = str.substring(1,str.length - 1)
		return isPalindromebyStep(subStr);
	}else{
		return false
	}
}
console.log('---回文字符串递归---');
console.log(isPalindromebyStep('aab'));
console.log(isPalindromebyStep('bba'));
console.log(isPalindromebyStep('aba'));

function isPalindromebyStep1(str){
	let strlen = str.length
	let isflag = true
	if(str.length<=1){
		return true
	}
	for (let i = 0; i < str.length/2; i++) {
		if(str[i] != str[str.length - i - 1]){
			isflag = false
			break						
		}

	}
	return isflag
}
console.log('---回文字符串递推---');
console.log(isPalindromebyStep1('aab'));
console.log(isPalindromebyStep1('bba'));
console.log(isPalindromebyStep1('aba'));