如何用java8的lambda写一个求阶乘的函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用java8的lambda写一个求阶乘的函数相关的知识,希望对你有一定的参考价值。
参考技术A 作者:青虹链接:https://www.zhihu.com/question/30088949/answer/164364307
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码如下:
package lamda;
import java.util.function.Function;
import java.util.function.IntToDoubleFunction;
public class Recursive
public static void main(String[] args)
IntToDoubleFunction[] foo = null;
foo[0] = x -> (x == 0) ? 1 : x * foo[0].applyAsDouble(x - 1);
System.out.println(foo[0].applyAsDouble(10));
// fuck generics
Function<Integer, Integer>[] fuckRecusive = new Function[1];
fuckRecusive[0] = (x) -> x == 1 ? 1 : x * (fuckRecusive[0]).apply(x - 1);
System.out.println(fuckRecusive[0].apply(10));
在Python中递归函数调用举例and匿名函数lambda求1~100的和及计算阶乘举例
1.递归列出目录里的文件的脚本举例列出目录中的文件可以通过下面方法:os.listdir()
In [1]: import os
In [4]: os.listdir(‘/root‘)
Out[4]:
[‘.tcshrc‘,
‘.bash_history‘,
‘.bashrc‘,
‘ENV‘,
‘.cache‘,
‘.config‘,
‘.cshrc‘,
‘.bash_logout‘,
‘python‘,
‘.ssh‘,
‘shell‘,
‘.bash_profile‘,
‘.ipython‘,
‘.viminfo‘,
‘dictionary.txt‘,
‘1.txt‘]
判断是否为目录:
In [5]: os.path.isdir(‘/home‘)
Out[5]: True
判断是否为文件:
In [7]: os.path.isfile(‘/etc/rc.local‘)
Out[7]: True
拼接文件名字的绝对路径:
In [8]: os.path.join(‘/etc/‘,‘passwd‘,‘abc‘)
Out[8]: ‘/etc/passwd/abc‘
列出目录下所有文件脚本如果下:
#!/usr/bin/env python
#FengXiaoqing
# listDir.py
import os
import sys
def print_files(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
if dirs:
for d in dirs:
print_files(os.path.join(path,d))
if files:
for f in files:
print (os.path.join(path,f))
print_files(sys.argv[1])
[[email protected] ~]# tree /tmp
/tmp
├── 123.tx
├── 123.txx
└── a
└── b
├── b.txt
└── c
├── c.txt
└── d
└── d.txt
4 directories, 5 files
[[email protected] ~]#
[[email protected] ~]# python listDir.py /tmp
/tmp/123.tx
/tmp/123.txx
/tmp/a/b/b.txt
/tmp/a/b/c/c.txt
/tmp/a/b/c/d/d.txt
[[email protected] ~]#
2.匿名函数lambda
lambda函数是一种快速定义单选的最小函数,可以用在任何需要函数的地方。
3*5实现方法:
In [1]: def fun(x,y):
...: return x * y
...:
In [2]: fun(3,5)
Out[2]: 15
匿名函数定义如果下:
In [3]: lambda x,y:x * y
Out[3]: <function __main__.<lambda>> #返回的对象
In [4]: r = lambda x,y:x * y
In [6]: r(3,5)
Out[6]: 15
匿名函数优点:
1.使用python写一些脚本时候,使用lambda可以省去定义函数的过程,让代码更加精简。
2.对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要层次理论考虑命名的问题。
3.使用lambda在某些时候让代码更容易理解。
lambda基础:
lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。
lambda语句构建的其实是一个函数对象。
help(reduce)
Help on built-in function reduce in module __builtin__:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5). If initial is present, it is placed before the items
of the sequence in the calculation, and serves as a default when the
sequence is empty.
(END)
reduce二元计算:
In [19]: def add(x,y):
return x + y
....:
In [20]: add(1,3)
Out[20]: 4
求1到100相加的和:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#date:2019.07.05
print (‘1+100的总和是:%s‘ % reduce(lambda x,y:x+y,range(1,101)))
求阶乘:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#date:2019.07.05
print (‘5的阶乘是:%s‘ % reduce(lambda x,y:x*y,range(1,6)))
以上是关于如何用java8的lambda写一个求阶乘的函数的主要内容,如果未能解决你的问题,请参考以下文章