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'));