杨辉三角js算法

上个星期,小熙有幸去艺龙网面试web前端开发职位,技术经理在面试中,给小熙出了一道数学题。学名杨辉三角。用函数计算出第n行,第m个数值是多少。直接看效果吧

让我用函数算出,第n行,第m个数字是什么。作为理科生的小熙,虽然脑子也灵光,可是。这么久不做数学题,况且还是用函数做出来,当时脑瓜一翁,完蛋了啦,game over了。不会。。。 回来后,我找到难点,其实,最大的难点在于,我不会递归。这一直是我的一个痛点。呵呵了。。。于是,先了解,递归,,我总感觉,自己经常淹没的递归里,无法脱身。。。用早就忘记数学的脑子,终于把递归想通了,,于是,用两种方法来实现面试效果:

// 方法1
function findNum(n,m){
  if(m>n){
    return false;
  }
  if(m==1 || m==n){
    return 1;
  }
  if(m==2 || m==n-1){
    return n-1;
  }
  return findNum(n-1,m) + findNum(n-1,m-1);
}
console.log(findNum(7,5))   //15

// 方法2
function countNum(n,m){
  if(m>n) return false;
  switch(m) {
    case 1 :
    case n :
      return 1;
    case 2:
    case n-1:
      return n-1;
    default:
      return countNum(n-1,m) + countNum(n-1,m-1);
  }
}
console.log(countNum(7,5))   //15

事实证明,只要经过自己的努力,还是可以做出来滴。。。嘻嘻。分享出来,希望对大家有所帮助。

时间: 2024-10-05 15:51:45

杨辉三角js算法的相关文章

打印杨辉三角 --JS

var arr = new Array(); for(var i = 0 ;i < 6 ; i++){ if(i == 0){arr.push(1);} else if(i == 1){arr = new Array();arr.push(1);arr.push(1);} else{ var arr2 = new Array(); arr2.push(1); for(var j = 0;j<arr.length - 1; j++){arr2.push(arr[j] + arr[j+1]);}

JavaScript实现杨辉三角

杨辉三角的算法还是比较简单易懂的,只是要想在控制台更好的实现三角输出就没那么简单了. 根据目前所学,使用了二维数组实现杨辉三角. 每一行都是一个内层数组. 在输出的时候再将每一个内层数组转换成字符串来输出,这样就不会出现中括号,看起来就更美观. 要想第一行居中,就根据所要输出的行数来给每一个内层数组前面添加空格. 而且要考虑行数越多,下面的每一个数字的长度就越大,然后我就根据最大数字的长度来给每一个数字后面加空格,使每一个数字所占的宽度相同,方便排列. 我这个方法也是假的,不是真正的居中对齐,只

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

【LeetCode-面试算法经典-Java实现】【119-Pascal&#39;s Triangle II(帕斯卡三角形(杨辉三角)II)】

[119-Pascal's Triangle II(帕斯卡三角形(杨辉三角)II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra

算法基础_递归_求杨辉三角第m行第n个数字

问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好): import java.util.Scanner; /** * 求杨辉三角第m层第n个数字 * @author Administrator * */ public class Demo05 { public static int f(int m,int n) { if(n==0)return 1

算法:杨辉三角(Pascal&#39;s Triangle)

一.杨辉三角介绍 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形.巴斯卡三角形,是二项式系数的一种写法,形似三角形,在中国首现于南宋杨辉的<详解九章算法>得名,书中杨辉说明是引自贾宪的<释锁算书>,故又名贾宪三角形.在那之前,还有更早发现这个三角的波斯数学家和天文学家,但相关的内容没有以图文保存下来,所以中国的数学家对此研究有很大贡献. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 3

C语言之基本算法31—杨辉三角

//二维数组! /* ================================================================== 题目:打印杨辉三角 1 1   1 1   2   1 1   3   3   1 1   4   6   4   1 1   5  10  10   5   1 1   6  15  20  15   6   1 ............... ================================================

算法练习四:打印杨辉三角

规律:1.第n层的总和等于2的n次幂:     2. 从第三层开始数字等于它上方的两个数字之和:     3.每一行的长度等于 n ,循环 n 次: function text(n){ var arr = []; //结果 var arr1 = []; //中转 //生成杨辉三角数据 for (var i = 1; i <= n; i++) { arr1 = [1]; //第一个值为"1" for(var j = 1; j < i; j++){ if(j == i-1){

matlab算法之杨辉三角

% 帕斯卡三角形 % 杨辉三角,又名 贾宪三角形 global N; N=12; paint(); ---------------------------------------------------------- function []=paint() global N; N=12; for n=0:N; for r=0:n; if(r==0) for i=0:N-n fprintf('  '); end else fprintf('  '); end fprintf('%3d',combi